关于 == 和 equals

来源:互联网 发布:淘宝上的zuzu是正品吗 编辑:程序博客网 时间:2024/06/01 10:31

在java中,equals方法是继承自object类。它与==不一样。

==用来比较两个名称是否参考自同一个对象,equals方法用来比较两个名称对应的内容是否相同。

例如:

import java.io.*;import java.util.Scanner;import java.math.*;import java.lang.*;public class Main10 {public static void main(String[] args) {String a = "Hello";String b = "Hello";System.out.println("a == b?" + " " + (a == b));System.out.println("a == b?" + " " + a.equals(b));Integer c = 3;Integer d = 3;System.out.println("c == d?" + " " + (c == d));System.out.println("c == d?" + " " + c.equals(d));}}


执行结果为:

a == b? true
a == b? true
c == d? true
c == d? true


这是因为a和b,c和d参考的是同一个对象,它们指向的是同一段内存。对于String类,维护一个String Pool,对于一些可以共享的字符串对象,会先在String Pool中查找是否存在相同的String内容(字符相同),如果有旧直接传回,而不是直接创建一个新对象,以减少内存的消耗。所以对于==,a和b参考的是一个对象,都是“Hello”这个字符串。对于equals方法,a和b,c和d的内容是一样的,所以也是true。


import java.io.*;import java.util.Scanner;import java.math.*;import java.lang.*;public class Main10 {public static void main(String[] args) {String a = new String ("Hello");String b = new String ("Hello");System.out.println("a == b?" + " " + (a == b));System.out.println("a == b?" + " " + a.equals(b));Integer c = new Integer(1);Integer d = new Integer(1);System.out.println("c == d?" + " " + (c == d));System.out.println("c == d?" + " " + c.equals(d));}}

执行结果为:

a == b? false
a == b? true
c == d? false
c == d? true


在==的时候都输出false,这是因为他们不再参考同一个变量,a,b对应的是new出的两个不同的对象,同理c,d也是。

但是它们的内容还是一样的,所以equals方法中都输出true。




0 0
原创粉丝点击