当前位置: 技术问答>java相关
新手请教一个关于使用String类修改的简单问题。谢谢
来源: 互联网 发布时间:2015-09-09
本文导语: 书上说:由String类创建的对象在创建之后是不允许在改变和修改的,所以称为字符串常量。 那现在我在程序中开始 String str=new String("Myjava"); 到后面又 str="MyDelphi"; 那不是对str来说,改变了么?? 请问应该怎样...
书上说:由String类创建的对象在创建之后是不允许在改变和修改的,所以称为字符串常量。
那现在我在程序中开始
String str=new String("Myjava");
到后面又 str="MyDelphi";
那不是对str来说,改变了么??
请问应该怎样理解上面的话呢??到底是什么不能修改?? 谢谢
那现在我在程序中开始
String str=new String("Myjava");
到后面又 str="MyDelphi";
那不是对str来说,改变了么??
请问应该怎样理解上面的话呢??到底是什么不能修改?? 谢谢
|
所谓的string类创建后不可以改变,并不是指它的值不可以改变
而是说一旦定义了一个string变量之后,那么会在内存中为这个变量留出一个位置,那么在内存中这个值是不可以改变的,一旦你改变了string变量的值,虽说表面上还是这个变量,但其实在内存中已经又生成了另外一个对象
也就是说string对像一旦发生改变,就会生成一个新的对象
而是说一旦定义了一个string变量之后,那么会在内存中为这个变量留出一个位置,那么在内存中这个值是不可以改变的,一旦你改变了string变量的值,虽说表面上还是这个变量,但其实在内存中已经又生成了另外一个对象
也就是说string对像一旦发生改变,就会生成一个新的对象
|
它指的修改是对对象而言的,所以你并没有改变String对象的值,而只是改变了句柄所指的对象。也就是说现在内存中出现了两个String对象,"Myjava"和"Mydelphi"
|
你的str是一个reference,指向了不同的对象
stringbuffer就是在同一个对象上修改
stringbuffer就是在同一个对象上修改
|
改变啦
后面str="MyDelphi"
是赋值给str,所以改变啦
最初String str=new String("Myjava");可以说是初始化吧
后面str="MyDelphi"
是赋值给str,所以改变啦
最初String str=new String("Myjava");可以说是初始化吧
|
对象改变和它的值改变是不同的。
|
str = "MyDelphi",
str指向另一个String
reference Object
str --> "Myjava"
|
| --> "MyDelphi"
str指向另一个String
reference Object
str --> "Myjava"
|
| --> "MyDelphi"
|
同意楼上
|
实际上有两个String对象,内容分别是"Myjava"和"MyDelphi"
str="MyDelphi";
创建一个新的String Object,再将str参数指向"MyDelphi"
str="MyDelphi";
创建一个新的String Object,再将str参数指向"MyDelphi"