有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中是否有其他变量或对象,如字符串对象,如果它们的值相等,它们将共享一个内存位置或对象引用?

我了解到,以下变量将共享JVM内存中的相同位置,因为它们的值相同:

String banana = "yummy";
String strawberry = "yummy"; // banana == strawberry is true here

除非您为其中一个用户提供如下“new”关键字:

String banana = "yummy";
String strawberry = new String("yummy"); // banana == strawberry is false

以便强制创建新的字符串对象

我想知道的是,除了Java中String类的对象之外,还有其他对象会发生这种情况吗


共 (3) 个答案

  1. # 1 楼答案

    是的,这适用于其他类型。下面是一个例子:

      Integer a = 42;
      Integer b = 42;
    

    通过自动装箱生成的范围为-128到+127的Integer的实例保证是相同的对象;参见JLS 5.1.7BooleanByteShortCharacter也有类似的保证。它还可以应用于更大范围的上述内容,以及Long,尽管这是特定于平台的

    事实上,您真正需要的是类型T的示例,其中t1.equals(t2)表示t1 == t2。。。对于T的某些子集。这适用于所有数组类型,以及不重写Object.equals的任何类类型。后者的示例包括所有enum类型、java.lang.Classjava.lang.StringBuilderjava.lang.Object本身

  2. # 2 楼答案

    String banana = "yummy"; 
    

    是字符串池中对“yummy”的引用

    String strawberry = new String("yummy");
    

    在堆中创建新对象

    字符串具有方法intern()

    Returns a canonical representation for the string object.

    此代码打印为true:

    String banana = "yummy";
    String strawberry = new String("yummy"); 
    System.out.println(banana == strawberry.intern());
    

    String javadoc

    无论如何,对引用类型对象使用方法等于

  3. # 3 楼答案

    否,这仅适用于字符串对象