黑马程序员技术交流社区
标题:
为什么输出的是Hello,而不是World
[打印本页]
作者:
MQ_H
时间:
2015-6-18 10:22
标题:
为什么输出的是Hello,而不是World
public class Test
{
public static void main(String[] args)
{
String string = "Hello";
test(string);
System.out.println(string);
}
public static void test(String str)
{
str = "World";
}
}
作者:
我是隔壁老王呀
时间:
2015-6-18 10:46
本帖最后由 我是隔壁老王呀 于 2015-6-18 11:01 编辑
http://www.cnblogs.com/lixiaolun/p/4311863.html
作者:
limingdada
时间:
2015-6-18 10:48
上面解释的好仔细。
作者:
tgwxfs
时间:
2015-6-18 11:30
你传递的是个副本而非引用= ="虽然把值依旧传到了test()里,但是当该方法走完也就自动销毁了= =所以才会打印出hello= ="
作者:
825176857
时间:
2015-6-18 12:12
string 没有变
str变了
public class test1 {
public static void main(String[] args){
Cat c=new Cat();
c.age=1;
method(c);
System.out.println(c.age);
}
public static void method(Cat cat){
cat.age=5;
}
}
class Cat
{
int age=2;
}
复制代码
引用传递,内存地址没变所以,age改变了。
无标题.png
(82.06 KB, 下载次数: 69)
下载附件
2015-6-18 12:10 上传
作者:
改变
时间:
2015-6-18 12:46
楼上正解
作者:
hi潘
时间:
2015-6-18 15:19
因为你定义的string形式是:String string = "Hello",string是字符型常量被放到常量池中。
String特点是不变的,也就是说你以String string = "Hello"形式定义,string就指向“Hello”
你再给他赋值是,string就会指向你最后赋值的那个值不在指向hello
作者:
rose_xiaomei
时间:
2015-6-18 20:05
连看了几个链接,涨知识了
作者:
我要当大牛
时间:
2015-6-18 20:58
看着好复杂,小白正在努力中
作者:
edithe
时间:
2015-6-18 21:11
我来献下丑:我觉得是这样的,首先,我们得明白String类型变量一直初始化是不能改变的
首先有个变量string指向hello,然后用Test方法,有str也指向hello(方法传值),然后str变量的指向改变了,是指向wolrd了,但是string还是指向hello,你打印string,当然是hello了
一点浅见,不知道对不对
作者:
繁华落幕
时间:
2015-6-18 21:12
上面的 已经说的多了 数据进来 执行完 就弹站了 并没有改变值
作者:
world.net
时间:
2015-6-18 21:19
看看学习
作者:
安安安
时间:
2015-6-18 21:20
看完上面的链接就懂了。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2