【发布时间】:2015-09-27 10:33:14
【问题描述】:
我正在阅读有关 == 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;
【问题讨论】:
-
当您使用双引号而不是 new 运算符创建字符串时,它首先会查找字符串池,如果找到具有相同字符串的字符串,则返回对它的引用,否则会创建新的
-
@Murinik 为什么标记为重复?即使我的问题不同,我也会编辑它。
-
@EthicalThinker 答案和解释是相同的 - 标记为重复意味着提出语义相同问题的人将被引导到已建立的答案池。
-
你有没有读过一本关于 Java 的书并了解引用类型和原始类型之间的区别?
标签: java