Java中的运算符“ new”,使用

时间:2019-03-11 20:39:09

标签: java string object new-operator

创建对象之间有什么区别,例如在我的代码中,使用运算符“ new”键入Obj和对象类型为String?

public class Objs {
    int a;

    public Objs(int a)
    {
        this.a = a;
    }

    public static void main(String[] args)
    {
        String str = new String("Hello");
        String str1 = str; // (str1 == str) == true
        str += ", world!!"; // after this (str1 == str) == false - Why?

        Objs o = new Objs(4);
        Objs o1 = o;        //(o == o1) == true
        o.a += 9;           // after this (o == o1) == true also
    }
}

为什么在更改“ str”的值后,引用“ str”和“ str1”变得不相等,但是如果我对类Obj进行相同的引用,则引用保持相等?

1 个答案:

答案 0 :(得分:0)

因为Java中的String类型是不可变的,这意味着不能修改字符串对象,而是使用给定的表达式创建一个新的字符串对象。

str += ", world!!"; //在这一行,使用给定的连接创建了一个新的str对象,因此str失去了对先前对象的引用,现在指向了新对象-这就是原因。