java中的字符串差异
为什么String类在Java中是不可变的,因为每次我们在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
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;