黑马程序员技术交流社区

标题: 为什么输出的是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变了
  1. public class test1 {
  2.         public static void main(String[] args){
  3.                 Cat c=new Cat();
  4.                 c.age=1;
  5.                 method(c);
  6.                 System.out.println(c.age);
  7.         }
  8.         public static void method(Cat cat){
  9.                 cat.age=5;       
  10.                
  11.         }
  12. }
  13. class Cat
  14. {
  15.         int age=2;
  16. }
复制代码
引用传递,内存地址没变所以,age改变了。


无标题.png (82.06 KB, 下载次数: 69)

无标题.png

作者: 改变    时间: 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