Chinaunix
标题:
真搞不懂这两个程序为嘛输出结果不一样 很混乱。。
[打印本页]
作者:
GalaxyNext
时间:
2012-05-17 02:54
标题:
真搞不懂这两个程序为嘛输出结果不一样 很混乱。。
Capture.PNG
(10.47 KB, 下载次数: 21)
下载附件
2012-05-17 02:54 上传
Capture1.PNG
(14.54 KB, 下载次数: 16)
下载附件
2012-05-17 02:54 上传
作者:
sunny7476
时间:
2012-05-17 15:38
字符串(String)类型不能直接被方法修改。记住这点就行了。可以通过return来实现。
如第一个程序这样就该就可以了。
public static void main(String[] args)
{
// TODO Auto-generated method stub
String a = "a";
a= fun(a);
System.out.println(a);
}
public static String fun(String b)
{
b= "b";
return b;
}
复制代码
作者:
awool_cu
时间:
2012-05-17 16:05
左边的程序输出的是腾讯的结果,因为str2是局部变量,函数调用后,str2就被释放,不能覆盖str1实体变量
右边的程序输出的是马化腾的结果,因为name是个实体变量,具有全局变量性质,所以新值会覆盖旧值
作者:
方兆国
时间:
2012-05-17 21:01
回复
1#
GalaxyNext
其实任何一本基础一点儿的编程语言的书上都有的,函数的临时变量与返回值
作者:
GalaxyNext
时间:
2012-05-17 22:14
回复
3#
awool_cu
嘿嘿 好像懂点点 谢谢你们了 小白 好菜。。。
作者:
GalaxyNext
时间:
2012-05-17 22:15
回复
4#
方兆国
谢谢 我就是有点搞不懂对象的引用传递。
作者:
方兆国
时间:
2012-05-17 22:17
回复
7#
GalaxyNext
其实我看到第二个的时候第一反应就是和第一个一样
作者:
GalaxyNext
时间:
2012-05-18 23:59
回复
8#
方兆国
不一样。。
作者:
方兆国
时间:
2012-05-19 16:16
回复
9#
GalaxyNext
然后想了想,发现真的不一样
作者:
GalaxyNext
时间:
2012-05-19 23:23
回复
10#
方兆国
........................
作者:
大邪神
时间:
2012-06-09 16:13
先说第一个,虽然传过去的也是引用,但是在java中,String 类型是不能改变的,所以,修改 String 值的方法是:新建一个String ,然后指向它,所以,在第一个当中,并没有改变str1所指向的String对象的值。所以,不变。
第二个传过去的是对象的引用,所以在第二个改变String时,已经改变了P1中name的指向,虽然函数返回,但变化已经确定了。所以,这个变了。
作者:
pxbfeiniao
时间:
2012-06-10 15:18
引用就是功能受限制的指针!
c/c++/java中,只存在值传递。引用传递也只是传递了引用的值(即地址),并没有传递引用本身。
作者:
txoscarr
时间:
2012-06-20 15:08
作者:
txoscarr
时间:
2012-06-20 15:15
因为String 是final的,亲
作者:
tessykandy
时间:
2012-06-20 16:50
这个涉及到JAVA的深拷贝和浅拷贝的问题
String: 预定义非集合类型, 作为参数时其实是深拷贝
Person: 自定义类型, 作为参数时其实是浅拷贝,拷贝的是引用
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2