关于用函数修改String的问题
2013-02-23 09:50
218 查看
看看传递String对象会发生什么结果?
class Str
{
public static void main(String[] args)
{
String s = "java test";
System.out.println(s);
changeString(s);
System.out.println(s);
}
public static void changeString(String str)
{
str = "3gg over right";
}
}
看看结果吧:
java test
java test
你惊奇的发现s的值并没有改变!你会问了,String不也是引用类型的吗?怎么它的值没有改变呢?
因为是这样的:
String被设计为不可修改的类型,也就是对String对象的任何修改都将重新创建一个对象而放弃以前的内存空间的引用!
如上例:
比如 s指向0x2344, 当它赋值给str时str也同样指向了0x2344.而当 执行str="3gg over right"后,str指向了别的地方。也许是
0x2222或者其他,反正不是0x2344了。所以当你输出s的时候,它的值并没有被修改!
class Str
{
public static void main(String[] args)
{
String s = "java test";
System.out.println(s);
changeString(s);
System.out.println(s);
}
public static void changeString(String str)
{
str = "3gg over right";
}
}
看看结果吧:
java test
java test
你惊奇的发现s的值并没有改变!你会问了,String不也是引用类型的吗?怎么它的值没有改变呢?
因为是这样的:
String被设计为不可修改的类型,也就是对String对象的任何修改都将重新创建一个对象而放弃以前的内存空间的引用!
如上例:
比如 s指向0x2344, 当它赋值给str时str也同样指向了0x2344.而当 执行str="3gg over right"后,str指向了别的地方。也许是
0x2222或者其他,反正不是0x2344了。所以当你输出s的时候,它的值并没有被修改!
相关文章推荐
- 关于QString转string时的问题,toLocal8Bit()函数
- 华为机试 小结 关于函数传参修改的问题
- 关于Java和SQL交互时的ResultSet.getString(“ Column ”)函数的自动补空格问题
- C++中关于string的一些函数的问题
- 关于C++中的函数返回局部string的问题
- Java值传递和地址传递:关于String类型和集合类型作为函数参数时传值问题的测试
- 关于String字符串空格的处理[用(char)12288解决空格问题]
- 关于C#函数对象参数传递的问题
- 关于C#使用外部DLL函数上的char*的问题
- 关于HOOK浏览器NtDeviceIoControlFile函数,修改POST数据的问题
- 面试中常问的十个关于String的问题
- jquer mobile关于查找替换修改span style样式问题
- 关于String的问题
- 关于C++调用C#封装的dll后,获取C#中string返回值的问题
- C++中关于get()和getline()函数读取行的问题
- 关于Java中String类型的参数传递问题
- 关于String index out of range: -1报错问题
- 关于Python中函数重载问题的思考
- 作业疑点:关于Linux下数学函数math.h无法编译问题
- 关于c语言的输入函数问题