java的方法调用问题

刚才看了论坛里面的一个问题,后来改了代码结果还是原来那样,自己都傻了。代码如下:
int str=2;
public int method1(int str){
str+=5;
return str;
}
public void method2(){
method1(str);
System.out.println(str);
}
public static void main(String[] args){
Test1 t1=new Test1();
t1.method2();
}
输出的结果是2.为什么呢?之前看到论坛上的是把str定义为局部变量的,现在我定义成全局变量结果还是2.太郁闷了。

湖上湖
浏览 371回答 10
10回答

阿波罗的战车

基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的,在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)); 就是楼主希望的结果了吧
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java