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