Java:请教关于String对象的重新赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:请教关于String对象的重新赋值相关的知识,希望对你有一定的参考价值。

“String对象一旦声明则不能轻易改变,如果要改变则需要先断开原有的对象引用,再开辟新的对象,之后再指向新的对象空间。”,请问为什么啊,看不明白。。谢谢各位了。。

String类的源代码如下:
/** The value is used for character storage. */
private final char value[];
首先你要明白,字符串的本质是一个字符数组。
value属性用来存放字符串中的字符,是一个final属性,即:不可被修改的属性。
所以,每当你要改变这个字符串的值时,都会在原来字符串的基础上产生一个新的字符串。
原来的字符串保持不变。即你说的:如果要改变则需要先断开原有的对象引用,再开辟新的对象,之后再指向新的对象空间.
参考技术A 各个原始字符串可以想象成存放在公共的储存池中,比如说"a","b",在储存池里面是独立的单元,而字符串"ab"相当于将这"a","b"的储存单元共享,并且在内存中单独开辟了一个空间来储存"ab"这个字符串.可以理解为C语言的指针.新开辟出来的空间储存的是指向"a","b"的地址.所以一旦对"ab"进行任何修改,那么内存单元需要重新开辟.例如现在"ab"变成"aba",那么"aba"的内存地址就和"ab"不一样了 参考技术B 声明一个String类型的对象之后,就会在相应栈内存中给你开辟一块控件来存储你声明的对象,但是你现在还没有使用,也就是指针还没有指向它;如果你要改变就需要开辟新的一块内存控件来存储你声明的对象,给你个例子吧
String a=1;
String b=2;
String a=3;
b=a;
System.out.println(b);
你可以去试试到最后输出的结果是什么?
参考技术C 例如:String s = "abc";s这个变量的指针是指向"abc"这个字符串在内存中的首地址,执行s = "d"的时候,s所指向的内存地址发生了变化,已经不是指向"abc"的首地址,而是把"d"存在内存中,把s的指针指向了"d"的地址本回答被提问者和网友采纳

以上是关于Java:请教关于String对象的重新赋值的主要内容,如果未能解决你的问题,请参考以下文章

请教大家关于JAVA中的静态变量和静态方法

关于C++中string类型变量的赋值

Java 对象赋值

请教大家,关于byte类型的运算问题

vue的watcher 关于数组和对象

java编程,关于父类子类变量赋值问题,和方法调用