2

String s1="Hello"Java和Java有什么区别String s1=new String("Hello")

如果String s1="Hello"String s2=new String("Hello"),会s1 == s2吗?

4

5 回答 5

3
String myStr = "hello";
String myStr1 = "hello";

当通过双等号进行比较时,这两者都将评估为真。但是,它们并不相等,而是都指向内存中的相同“文字字符串”。这绝不是您比较字符串内容的方式,所以不要让它愚弄您。

String myStr = new String("hello");
String myStr1 = new String("hello");

将评估为 false,因为它们都引用具有不同内存地址的不同对象。

use myStr.equals(myStr1)在比较 String 的内容是否相等时,总是总是总是如此。记住==只比较它们是否引用内存中的同一个对象。

于 2013-10-22T05:00:21.447 回答
3

对此进行编码:

String s1 = "Hello";

使 JVM 对String 字面量进行实习:每次使用相同的 String 字面量时,都会引用同一个对象。

对此进行编码:

String s2 = new String("Hello")

将始终创建一个新的 String 对象。

那么,会s1 == s2吗?

没有永不。

于 2013-10-22T05:00:48.493 回答
1

这是 Joshua Bloch 的 Effective Java 关于使用 "new String()" 的引述:

作为不该做什么的一个极端示例,请考虑以下语句:

String s = new String("stringette"); //不要这样做!

该语句每次执行时都会创建一个新的 String 实例,并且不需要创建这些对象。String 构造函数(“stringette”)的参数本身就是一个 String 实例,在功能上与构造函数创建的所有对象相同。如果这种用法发生在循环中或频繁调用的方法中,则可能会不必要地创建数百万个 String 实例。改进后的版本如下:

字符串 s = "弦线";

于 2013-10-22T05:00:05.803 回答
0

您的问题的答案是否定的,请找出以下原因:-

  1. 字符串 s1 = "你好"。在这里,hello 字符串将存储在一个位置,并且 s1 将保留对它的引用。
  2. String s2=new String("Hello") 将创建一个新对象,引用该对象并将存储在不同的位置。

条件 s1==s2 将比较现在是内存中 2 个不同位置的内存位置。所以它会是假的。

于 2013-10-22T05:05:00.527 回答
0

如果 String s1="Hello" 和 String s2=new String("Hello"),那么 s1 == s2 吗?

答案是:没有

因为,s1 和 s2 是不同的对象并且string是不可变的。所以, s1 == s2将是falses1.equals(s2)将是true

于 2013-10-22T04:55:54.527 回答