我正在阅读== 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;
答案 0 :(得分:1)
字符串使用String interning时有点特殊。 所以是的,在屏幕后面这两个字符串具有相同的内存引用(但不要指望它进行字符串比较。请参阅this question)。
用
替换字符串Object obj1 = new Object();
Object obj2 = new Object();
您将获得预期的输出。