==和equals()之间的区别

时间:2014-01-15 17:20:28

标签: java

我有一个问题。我不知道这有什么意义,但我真的需要一个答案

当我使用“==”作为

Integer i1 =10;
Integer i2 = 10;
if(i1 == i2) {System.out.println("same object")}

输出=同一个对象

但是,如果我使用“==”

String obj1 = new String("xyz");

String obj2 = new String("xyz");

if(obj1 == obj2)
   System.out.println("obj1==obj2 is TRUE");
else
  System.out.println("obj1==obj2 is FALSE");

输出= FALSE

我知道“==”运算符会查找对象的内存位置。但是在第一个例子中发生了什么i1和i2不是不同的对象?

2 个答案:

答案 0 :(得分:6)

小整数有内部缓存/池。 所以==检查返回true,因为它们指向同一个实际对象。

OP,顺便提一下你的问题是你输入了“if(i1 == 12)”而不是“if(i1 == i2)”。

示例1:

public class Test001
{

    public static void main(String args[]) {
        Integer i1 = 10;
        Integer i2 = 10;
        if(i1==i2) {System.out.println("same object 1");}

        i1 = 10024;
        i2 = 10024;
        if(i1==i2) {System.out.println("same object 2");}
    }
}

它只打印“同一对象1”,它显示缓存/池点。

将i1和i2分配给文字10这一事实非常重要。 如果你做了新的整数(10),那么他们会指向不同的对象。

示例2:

public class Test001
{

    public static void main(String args[]) {
        Integer i1 = 10;
        Integer i2 = 10;
        if(i1==i2) {System.out.println("same object 1");}

        i1 = new Integer(10);
        i2 = new Integer(10);
        if(i1==i2) {System.out.println("same object 2");}

        i1 = 10024;
        i2 = 10024;
        if(i1==i2) {System.out.println("same object 3");}
    }
}

这个也只打印“同一个对象1”。

答案 1 :(得分:1)

.equals()比较String本身的实际“内容”,而==检查对象引用是否指向对象的同一实例。