请你抽根烟\n 2025-01-09 19:02 采纳率: 72%
浏览 34
已结题

String 类valuve指向的问题

String 类中的value,是final的 那为什么学校讲的比如
String name ="tom" ;
name ="jack" ;
或是
String na=new String ("Ak");
na ="akl";
说 value重新指向。这不是互相矛盾了吗。
请讲解 ,通俗易懂即采纳。谢谢

  • 写回答

23条回答

  • 波塞冬~ 2025-01-10 08:55
    关注
    1. 理解Stringfinal特性
      • 在Java中,String类中的value是一个final的字符数组。final关键字用于表示这个变量一旦被赋值,就不能再重新赋值。对于String类来说,value数组存储了字符串的字符序列。
      • 例如,当创建一个String对象String str = "abc";时,str对象内部的value数组存储了字符'a''b''c',这个value数组本身不能被替换为另一个数组。
    2. 分析字符串赋值的过程
      • 当你写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类中valuefinal的限制了String对象内部存储字符序列的数组不能被替换,但变量对String对象的引用是可以改变的,这就导致了看起来像是value重新指向的现象,实际上是变量引用了不同的String对象。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(22条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月10日
  • 已采纳回答 1月10日
  • 创建了问题 1月9日