在字符串中使用“==”? (Java)
Using '==' with strings? (Java)
String str1 = new String("I love programming");
String str2 = new String("I love programming");
boolean boo = str1 == str2; // evaluates to false
String str1 = "I love programming";
String str2 = "I love programming";
boolean boo = str1 == str2; // evaluates to true
为什么第一个计算结果为 false 而第二个计算结果为 true?
在这里您可以找到更多信息:What is the Java string pool and how is "s" different from new String("s")?
equals()方法比较String的内容,==比较Java中的引用。
如果对象本身具有相同的地址,==
将 return 为真。出于 space 和效率原因,重复的文字被优化为使用相同的地址。第二个 str1
和 str2
等于同一个地址,因此 ==
return 为真。
在第一个示例中,因为您使用 new
关键字显式声明内存,所以 str1
和 str2
没有相同的地址。因此,str1==str2
的计算结果为 false
.
测试相等性时,请改用 String.equals();
函数。因此,str1.equals(str2); //true
它存在于 Java 内存模型中
第一个相等语句 returns 为 false,因为您正在比较两个不同对象的两个不同引用,因为您使用关键字 new
在堆内分配内存 space到两个不同的内存地址,秒,JVM 将分配内存 space 一次 "into the stack" ( 从 Java 7 它们也在堆中 ) 并且编译器通过使两个变量指向同一内存 space 来优化内存使用,它解释了相等结果是 true
.
这里有一篇关于堆、栈等的有趣读物。 JVM Internals Blog
干杯
不像 C。(==) 比较 java 字符串变量的引用。它比较存储字符串的两个地址。两者按值比较,需要用string1.equals(string2).
String str1 = new String("I love programming");
String str2 = new String("I love programming");
boolean boo = str1 == str2; // evaluates to false
String str1 = "I love programming";
String str2 = "I love programming";
boolean boo = str1 == str2; // evaluates to true
为什么第一个计算结果为 false 而第二个计算结果为 true?
在这里您可以找到更多信息:What is the Java string pool and how is "s" different from new String("s")?
equals()方法比较String的内容,==比较Java中的引用。
==
将 return 为真。出于 space 和效率原因,重复的文字被优化为使用相同的地址。第二个 str1
和 str2
等于同一个地址,因此 ==
return 为真。
在第一个示例中,因为您使用 new
关键字显式声明内存,所以 str1
和 str2
没有相同的地址。因此,str1==str2
的计算结果为 false
.
测试相等性时,请改用 String.equals();
函数。因此,str1.equals(str2); //true
它存在于 Java 内存模型中
第一个相等语句 returns 为 false,因为您正在比较两个不同对象的两个不同引用,因为您使用关键字 new
在堆内分配内存 space到两个不同的内存地址,秒,JVM 将分配内存 space 一次 "into the stack" ( 从 Java 7 它们也在堆中 ) 并且编译器通过使两个变量指向同一内存 space 来优化内存使用,它解释了相等结果是 true
.
这里有一篇关于堆、栈等的有趣读物。 JVM Internals Blog
干杯
不像 C。(==) 比较 java 字符串变量的引用。它比较存储字符串的两个地址。两者按值比较,需要用string1.equals(string2).