Java中的String s1="Hello"
和String s1=new String("Hello")
之间的区别是什么?String s1 =“Hello”和String s1 = new String(“Hello”)之间的区别是什么?
如果String s1="Hello"
和String s2=new String("Hello")
,将s1 == s2
?
Java中的String s1="Hello"
和String s1=new String("Hello")
之间的区别是什么?String s1 =“Hello”和String s1 = new String(“Hello”)之间的区别是什么?
如果String s1="Hello"
和String s2=new String("Hello")
,将s1 == s2
?
如果String s1 =“Hello”并且String s2 = new String(“Hello”),那么s1 == s2?
答案是:否。
因为,S1和S2是不同的对象,并string
是不可变的。所以,s1 == s2
将是false
和s1.equals(s2)
将是true
。
这里是距离Joshua Bloch的Effective Java的关于 “)新的String(” 使用的报价:
由于什么不能做一个极端的例子,此声明:
的String = new String(“stringette”); // 不要这样做!
该语句每次执行时都会创建一个新的String实例,并且这些对象创建都不是必需的。字符串构造函数(“stringette”)的参数本身就是一个字符串实例,在功能上与构造函数创建的所有对象完全相同 。如果这个 用法出现在循环或频繁调用的方法中,则可以毫无用处地创建数百万个字符串实例。改进的版本是 简单地执行以下操作:
的String = “stringette”;
String myStr = "hello";
String myStr1 = "hello";
这些时通过双等于两者相比将评估为true。然而,它们并不相等,而是都指向内存中相同的“文字串”。这从来没有如何比较一个字符串的内容,所以不要让这个骗过你。
String myStr = new String("hello");
String myStr1 = new String("hello");
将评估为false,因为它们都引用具有不同内存地址的不同对象。
始终始终始终use myStr.equals(myStr1)
比较字符串的内容是否相等时。 还记得==
只比较它们是否引用内存中的同一个对象。
+1相关示例.. –
如果String s3 =“Hello”,则s3 == s1? –
好吧,它会出现,如果他们在那种情况下,但它不是比较他们的方式,我们想比较他们,这是内容。我们希望看看s1和s3中的每个字符是否都是同一个,而不是两个引用变量是否指向内存中的相同位置。不要习惯于以这种方式比较对象(字符串是一个对象),因为你会得到错误的结果,后来它会混淆你。对象是不透明的(封装和数据隐藏),因此定义对象内容的内容会有所不同。现在只需使用.equals() – Whoppa
你的问题的回答是否定的,请在下面找到了原因: -
条件s1 == s2将比较内存中现在2个不同位置的内存位置。所以它会变成错误的。
那么'=='运算符匹配引用。由于在这个例子中有2个元素s1和s2,因为他们有不同的引用/地址,所以输出是s1 == s2将是错误的。但是如果使用'equals()',则输出将为真,因为这些值将进行比较,并且根据问题的值是相同的。 – BIJAY
如果有两个字符串,即s1和s2,如果String s1 =“Hello”; String s2 =“Hello”;这里s1 == s2给出了一个真正的输出。 – BIJAY