-
阿波罗的战车
基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的,在Java中对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。String比较特殊,传的是在常量池的中的地址
-
慕容森
你的运行中 有2个String对象,全局变量的str的值一直都是2 而方法1中的是局部变量 运行到方法1的时候 只是把str的值传给了这个方法1中的局部变量 全局的str的值没变 你输出的是全局的str当然还是2了
-
暮色呼如
楼上正解,传入method只是拷贝了一份str而已PS:定义一个int类型的str变量,感觉怪怪的 :oops:
-
不负相思意
变量作用域
-
皈依舞
public void method2(){//method1(str);System.out.println(method1(str));} 试试
-
慕莱坞森
变量的作用域问题吧 你在method1()中操作的 其实是参数变量str,而非你所谓的全局变量str,如果你在method1中 str前添加this. 那么你的method2输出就为7了吧
-
阿晨1998
String不是基本类型
-
qq_遁去的一_1
变量作用域,这里method1中str+=5是局部变量str,屏蔽了全居变量str
-
慕仙森
public int method1(int str){ str+=5; return str;你把str+=5 修改为this.str+=5,就会收到不同的结果,因为在method1中,修改的只是局部变量中的str值,不是全局变量中的str值。
-
墨色风雨
有点搞啊, int 类型的变量名是str, 怎么感觉怪怪的;[code="java"]public void method2(){ method1(str); System.out.println(str); }[/code]这里如果改成 System.out.println(method1(str)); 就是楼主希望的结果了吧