黑马程序员技术交流社区
标题:
对于String一旦被建立初始化就不能够被改变的疑惑?急
[打印本页]
作者:
wkz_crystal
时间:
2015-3-16 16:58
标题:
对于String一旦被建立初始化就不能够被改变的疑惑?急
请看程序就OK了:
/*
有点小疑惑:不是说String一旦被定义初始化就不能被改变吗?
我这个小程序就有点矛盾哦,求详细介绍……
*/
class TestString
{
public static void main(String[] args)
{
String s1="hello good luck to you!";
String s2=s1.replace('e','w');
System.out.println(s2);
System.out.println(s1);
/*
打印结果是:
hwllo good luck to you!
hello good luck to you!
*/
/*
String s1="hello good luck to you!";
s1=s1.replace('e','w');
System.out.println(s1);
打印结果是:hwllo good luck to you!
那原来的s1跑到哪里去呢?
*/
}
}
复制代码
作者:
wkz_crystal
时间:
2015-3-16 17:00
这两者有什么具体的不同,请说得详细点,第二个代码块被替换了,但是这样的话,原值被改变了,是不是说明String对象中字符串的初始化可以被改变?
作者:
fantacyleo
时间:
2015-3-16 17:07
所谓可变不可变,是针对“对象”而不是“对象的引用”而言的。s1和s2变量都是存储在栈内存中的对象的引用,,而不是存储在堆内存中的对象本身。s1=s1.replace('e','w');只是让s1指向了与原先不同的对象,并没有改变原先对象的值。
String s1 = "hello";
String s2 = s1;
s1=s1.replace('e', 'w');
System.out.println(s2);
复制代码
上述代码运行结果是输出hello,证明"hello"对象并没有被改变。如果你认为"hello"对象被改变了,那么应该输出hwllo
作者:
谢鸿
时间:
2015-3-16 18:49
支持一个!!
作者:
wkz_crystal
时间:
2015-3-16 23:23
哦,你这样一说,终于明白了,谢谢,我当时怎么就没有从堆内存和栈内存中去具体分析呢?哎,现在看起来这个问题十分幼稚了,呵呵!感谢感谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2