为什么字符串在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 mutable

PreetiJain

在上面的示例中,仅创建了一个对象,只要我们对现有对象执行任何更改,更改都会得到反映。这意味着我们将得到类似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 immutable

Preeti

在上面的示例中,仅创建了一个对象,该对象指向原始字符串,并且每当我们在现有对象中执行任何更改时,更改都不会得到反映。这意味着我们将获得类似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 Immutability

value of 1st key value :10

以上是 为什么字符串在java是不可变的或final 的全部内容, 来源链接: utcz.com/z/334674.html

回到顶部