如何==运算符在Java中工作

时间:2015-09-27 10:33:14

标签: java

我正在阅读== operator in java并发现它用于比较内存引用,以下示例来自给定链接。

String obj1 = new String("xyz");

// now obj2 and obj1 reference the same place in memory
String obj2 = obj1;

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

在上面的代码中注意,obj2和obj1都引用相同的内容   由于这一行而放在内存中:“String obj2 = obj1;”。和   因为“==”比较每个对象的内存引用   将返回真实。并且,上面代码的输出将是:

之后我随机编写代码来检查==运算符,但为什么它在这个例子中返回true?

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

" ABC"字符串保存在一个内存位置然后obj1和obj2共享该内存引用?

即使是int也返回true。

int obj1=3;
int obj2=3;

1 个答案:

答案 0 :(得分:1)

字符串使用String interning时有点特殊。 所以是的,在屏幕后面这两个字符串具有相同的内存引用(但不要指望它进行字符串比较。请参阅this question)。

替换字符串
Object obj1 = new Object();
Object obj2 = new Object();

您将获得预期的输出。