0
class test
{
public static void main(String[] args)
 {
  String s1 = new String("JAVA");
  String s2 = new String("JAVA");
  String s3 = new String("JAVA");
 }
}

这里创建了多少字符串对象,为什么?

4

4 回答 4

2

3 个不同的 String 对象被声明并初始化为“JAVA”。

每次调用时new String()都会创建一个新的不可变 String 对象。

于 2013-02-23T16:02:02.650 回答
1

我不知道您如何打印出每个对象的哈希码,但请尝试以下操作,看看您会得到什么。您应该为每个 String 对象使用不同的哈希码,因为虽然每个对象都是具有相同值的 String,但它们存储在内存中的不同位置。

class test{
    public static void main(String[] args)
    {
        String s1 = new String("JAVA");
        String s2 = new String("JAVA");
        String s3 = new String("JAVA");

        System.out.println(System.identityHashCode(s1));
        System.out.println(System.identityHashCode(s2));
        System.out.println(System.identityHashCode(s3));
    }
}

那应该返回如下结果:

219604438
1514883920
87924608

这就是它在我的系统上返回的方式。你的会不一样。

于 2013-02-23T16:14:33.707 回答
0

正在创建三个不同的字符串对象,即使每个对象具有相同的值。new操作员创建一个对象的新实例。如果你从内存的角度来考虑它,它可能看起来像这样(假设左边的数字是内存中的位置):

String s1: 01
01 J
02 A
03 V
04 A

String s2: 06
06 J
07 A
08 V
09 A

String s3: 11
11 J
12 A
13 V
14 A

所以每个字符串在内存中都有自己的位置,但可以包含相同的值。

于 2013-02-23T16:05:36.450 回答
0

创建了 3 个不同的 String 实例。“new”关键字总是创建新对象。尽管它们具有相同的值,但它们被分配到不同的内存地址:)

于 2013-02-23T16:11:46.377 回答