关于引用类String传值的问题

关于引用类String传值的问题

public class Feng{

    public void feng(String a){

    a="123";

    }

    public static void main(String[] args){

    Feng str=new Feng();

    String a=new String("23");

    str.feng(a);

    System.out.println(a);

    }

}

这段程序运行后,变量a的值还是23,为什么没有变成方法里面的赋值,String不是应用类型么,那么变量a应该存储的就是引用的地址存在栈中,方法里改变参数的值,变量a应该也改变啊

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
imoocLovers 2018-07-11 16:01:22

a是一个局部变量,作用域是从定义开始,到main方法结束。虽然你将a作为参数传给feng这个方法进行处理,但是public void feng(String a)这里的参数a的作用域仅限方法内,所以方法执行之后,main中的a的值是没有改变的。下面是修改后的代码,同学可以运行看看结果:

public class Feng{

    public String feng(String a){

    a="123";
    return a;

    }

    public static void main(String[] args){

    Feng str=new Feng();

    String a=new String("23");

    a = str.feng(a);

    System.out.println(a);

    }

}


  • 提问者 暖阳洋 #1
    老师,但是数组作为引用类型是,方法参数改变,原数组也改变了啊,我想问的是string作为和数组一样的引用类,为什么传值到方法中,参数变了,原变量却没有改变
    2018-07-11 17:02:34
  • 提问者 暖阳洋 #2
    而且老师你上面的代码,实际上是原变量本身存储在对象的堆中,你用a=str.feng(a);后,变量a现在存储在了常量池,这和通过传入方法改变是不一样的
    2018-07-11 17:06:22
  • imoocLovers 回复 提问者 暖阳洋 #3
    数组名作为参数时,传入的是指向数组第一个元素的指针,与字符串类型传值是不一样的。
    2018-07-11 17:40:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师