为什么字符串在java是不可变的或final
首先,我们将了解可变性和不变性的概念。
1)可变的
当我们创建一个对象时。如果我们能够更改现有对象,则此行为仅是StringBuffer的可变性。
本质上,StringBuffer类是不可变的。
示例
class mutable{public static void main(String[] args){
StringBuffer sb = new StringBuffer("Preeti");
sb.append("Jain");
System.out.println(sb);
}
}
输出结果
D:\Java Articles>java mutablePreetiJain
在上面的示例中,仅创建了一个对象,只要我们对现有对象执行任何更改,更改都会得到反映。这意味着我们将得到类似PreetiJain的结果。
2)不可变
当我们创建一个对象时。如果我们不能在现有对象中进行更改,则此行为仅是String的不变性。
字符串类本质上是不可变的。
示例
class immutable{public static void main(String[] args){
String s = new String("Preeti");
s.concat("Jain");
System.out.println(s);
}
}
输出结果
D:\Java Articles>java immutablePreeti
在上面的示例中,仅创建了一个对象,该对象指向原始字符串,并且每当我们在现有对象中执行任何更改时,更改都不会得到反映。这意味着我们将获得类似Preeti的结果。
为什么String是不可变的?
对于String,多个引用可以指向同一个对象。如果任何参考进行了任何更改,则其他参考将受到影响。因此,字符串本质上是不可变的。
每当我们尝试通过键访问键值时,要将字符串对象存储为哈希表中的键,这就是字符串本质上是不可变的原因。每当更改现有对象时,就创建一个对象,而不是更改现有对象。
示例
import java.util.*;class Immutability{
public static void main(String[] args){
Hashtable ht = new Hashtable();
ht.put("preeti",10);
ht.put("Rahul",20);
ht.put("Rajeev",30);
ht.put("Avinash",40);
int getValue = (int)ht.get("preeti");
System.out.println("value of 1st key value :"+getValue);
}
}
输出结果
D:\Java Articles>java Immutabilityvalue of 1st key value :10
以上是 为什么字符串在java是不可变的或final 的全部内容, 来源链接: utcz.com/z/334674.html