String 类中的value,是final的 那为什么学校讲的比如
String name ="tom" ;
name ="jack" ;
或是
String na=new String ("Ak");
na ="akl";
说 value重新指向。这不是互相矛盾了吗。
请讲解 ,通俗易懂即采纳。谢谢
String 类valuve指向的问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
23条回答
波塞冬~ 2025-01-10 08:55关注- 理解
String的final特性- 在Java中,
String类中的value是一个final的字符数组。final关键字用于表示这个变量一旦被赋值,就不能再重新赋值。对于String类来说,value数组存储了字符串的字符序列。 - 例如,当创建一个
String对象String str = "abc";时,str对象内部的value数组存储了字符'a'、'b'和'c',这个value数组本身不能被替换为另一个数组。
- 在Java中,
- 分析字符串赋值的过程
- 当你写
String name = "tom";时,Java会在字符串常量池中创建一个包含字符't'、'o'、'm'的String对象,name变量引用这个对象。 - 当你接着写
name = "jack";时,并不是修改了原来"tom"这个String对象的value。实际上,Java会在字符串常量池中查找是否有"jack"这个字符串。如果没有,就创建一个新的String对象来存储"jack",然后name变量就不再引用原来的"tom"对象,而是引用新的"jack"对象。这就是所谓的“重新指向”。 - 对于
String na = new String("Ak");这一行,会在堆内存中创建一个新的String对象,其value数组存储'A'和'k',na引用这个对象。当你写na = "akl";时,同样的道理,na会放弃对原来new String("Ak")对象的引用,转而引用字符串常量池中(如果不存在就创建)的"akl"这个String对象。
- 当你写
所以,这里并不矛盾。
String类中value是final的限制了String对象内部存储字符序列的数组不能被替换,但变量对String对象的引用是可以改变的,这就导致了看起来像是value重新指向的现象,实际上是变量引用了不同的String对象。本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用- 理解