Java中String s1="Hello"
和String s1=new String("Hello")
之间的区别是什么?
如果String s1="Hello"
和String s2=new String("Hello")
,将s1 == s2
?
答案 0 :(得分:3)
编码:
String s1 = "Hello";
使JVM变为intern字符串文字:相同字符串文字的每次使用都将是对同一对象的引用。
编码:
String s2 = new String("Hello")
将始终创建一个新的String对象。
那么,s1 == s2
会是什么?
不,永远不会。
答案 1 :(得分:2)
String myStr = "hello";
String myStr1 = "hello";
当通过双等于比较时,这两者都将评估为真。但是,它们不相等,而是指向内存中相同的“文字字符串”。这绝不是你如何比较字符串的内容,所以不要让这个欺骗你。
String myStr = new String("hello");
String myStr1 = new String("hello");
将评估为false,因为它们都引用具有不同内存地址的不同对象。
在比较String的内容是否相等时,始终始终use myStr.equals(myStr1)
。
请记住==
仅比较它们是否在内存中引用相同的对象。
答案 2 :(得分:1)
以下是Joshua Bloch关于使用“new String()”的Effective Java的引用:
作为不做的极端例子,请考虑以下陈述:
String s = new String(“stringette”); // 不要这样做!
该语句在每次执行时都会创建一个新的String实例,而不是 那些对象创作是必要的。 String的参数 构造函数(“stringette”)本身就是一个String实例,在功能上 与构造函数创建的所有对象相同。如果这 用法发生在循环或频繁调用的方法中,数百万 可以不必要地创建字符串实例。改进版是 只需以下内容:
String s =“stringette”;
答案 3 :(得分:0)
如果String s1 =“Hello”且String s2 = new String(“Hello”),s1 == s2?
答案是:否。
因为,s1和s2是不同的对象,string
是不可变的。因此,s1 == s2
将为false
,s1.equals(s2)
将为true
。
答案 4 :(得分:0)
您的问题的答案是否定的,请找到以下原因: -
条件,s1 == s2将比较内存位置,这些位置现在是内存中的2个不同位置。所以它会变得虚假。