为了账号安全,请及时绑定邮箱和手机立即绑定

java的方法调用问题

java的方法调用问题

湖上湖 2019-03-28 15:11:42
刚才看了论坛里面的一个问题,后来改了代码结果还是原来那样,自己都傻了。代码如下: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.太郁闷了。
查看完整描述

10 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的,
在Java中对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。

String比较特殊,传的是在常量池的中的地址


查看完整回答
反对 回复 2019-04-26
?
慕容森

TA贡献1853条经验 获得超18个赞

你的运行中 有2个String对象,全局变量的str的值一直都是2 而方法1中的是局部变量 运行到方法1的时候 只是把str的值传给了这个方法1中的局部变量 全局的str的值没变 你输出的是全局的str当然还是2了


查看完整回答
反对 回复 2019-04-26
?
暮色呼如

TA贡献1853条经验 获得超9个赞

楼上正解,传入method只是拷贝了一份str而已
PS:定义一个int类型的str变量,感觉怪怪的 :oops:

查看完整回答
反对 回复 2019-04-26
?
不负相思意

TA贡献1777条经验 获得超10个赞

变量作用域


查看完整回答
反对 回复 2019-04-26
?
皈依舞

TA贡献1851条经验 获得超3个赞

public void method2(){
//method1(str);
System.out.println(method1(str));

试试

查看完整回答
反对 回复 2019-04-26
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

变量的作用域问题吧 你在method1()中操作的 其实是参数变量str,而非你所谓的全局变量str,如果你在method1中 str前添加this. 那么你的method2输出就为7了吧


查看完整回答
反对 回复 2019-04-26
?
阿晨1998

TA贡献2037条经验 获得超6个赞

String不是基本类型


查看完整回答
反对 回复 2019-04-26
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

变量作用域,这里method1中str+=5是局部变量str,屏蔽了全居变量str


查看完整回答
反对 回复 2019-04-26
?
慕仙森

TA贡献1827条经验 获得超7个赞

public int method1(int str){ 
str+=5; 
return str;

你把str+=5 修改为this.str+=5,就会收到不同的结果,因为在method1中,修改的只是局部变量中的str值,不是全局变量中的str值。


查看完整回答
反对 回复 2019-04-26
?
墨色风雨

TA贡献1853条经验 获得超6个赞

有点搞啊, int 类型的变量名是str, 怎么感觉怪怪的;
[code="java"]
public void method2(){ 
method1(str); 
System.out.println(str); 
}

[/code]

这里如果改成 System.out.println(method1(str)); 
就是楼主希望的结果了吧


查看完整回答
反对 回复 2019-04-26
  • 10 回答
  • 0 关注
  • 370 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信