java中的字符串差异

java中的字符串差异,java,Java,为什么String类在Java中是不可变的,因为每次我们在Java上调用某些方法时 字符串引用变量,是否创建了新字符串? public class Test { public static void main(String [] args) { String s = "abc"; s.toUpperCase(); // new String is created here. System.out.pri

为什么String类在Java中是不可变的,因为每次我们在Java上调用某些方法时 字符串引用变量,是否创建了新字符串?

  public class Test {

       public static void main(String [] args) {

            String s = "abc";
            s.toUpperCase(); // new String is created here.
            System.out.println(s);// prints abc instead of ABC
    }
}
为什么字符串类在Java中是不可变的,因为每次我们对字符串引用变量调用某些方法时,都会创建新的字符串

不,这不是因为创建了新字符串。反向走。为什么每次你得到一个新的字符串


由字符串类中的最终字符数组支持的字符串。因此,一旦您创建了一个字符串,在创建字符串对象之后,char数组就不会改变。这就是它背后的实际原因。

java中有一些类型,它们的实例是不可变的。除了
String
,还有
biginger、BigDecimal
Integer、Long、Double、Float、Short、Byte。(那些包装类型)
甚至
Boolean
这些实例是不可变的。如果您对这些实例做了一些更改,则这些实例的自身不会更改

例如

运行这两行之后,num自然是17。但是在运行第2行之后,
num
将是一个新的
Long
实例。与
字符串相同

另一个例子:

Boolean b = true;
b = false;
第1行和第2行中的
b
也是不同的实例


不可变对象相对更易于设计、实现和使用。我想这就是java应用不可变设计的原因。

您问了一个答案:)请阅读有关字符串的文档
toUpperCase
返回一个新字符串——原始字符串保持不变。
Boolean b = true;
b = false;