A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

老师上课讲引用数据类型的参数传递,形式参数的改变对实际参数是有直接影响的;
String属于引用数据类型那么这段代码运行结果 应该是def吧?
class  Stringcunfang
{
        public static void main(String[] args)
        {
                String a="abc";
                method(a);
                System.out.println(a);
        }
        public static String method(String a)
        {
                a="def";
                return a;
        }
}

自己写了验证下发现打印出来的还是abc,发现和老师讲的不一致,求解!

6 个回复

倒序浏览
本帖最后由 小虎199406 于 2015-7-19 13:00 编辑

你这样打印的只是主函数中的a    而并不是method方法中的a  System.out.println(method(a));
才是输出 method(a)方法中   return 的a
回复 使用道具 举报
本帖最后由 zhaoyue 于 2015-7-19 13:47 编辑
小虎199406 发表于 2015-7-19 12:59
你这样打印的只是主函数中的a    而并不是method方法中的a  System.out.println(method(a));
才是输出 meth ...

那我再给几句你看看
int [] arr={1,2,3,4,5};
change(arr);
System.out.print(arr[1]);
public static void change(int[] a)
{
    a.[1]=10;return;
}他这个输出结果不就该变了啊 不是main里边的arr了,我想问的是  String定义的时候是存在于栈还是堆;


回复 使用道具 举报
zhaoyue 发表于 2015-7-19 13:45
那我再给几句你看看
int [] arr={1,2,3,4,5};
change(arr);

有完整代码么?
回复 使用道具 举报
本帖最后由 小虎199406 于 2015-7-19 13:58 编辑
zhaoyue 发表于 2015-7-19 13:45
那我再给几句你看看
int [] arr={1,2,3,4,5};
change(arr);
堆内存中
回复 使用道具 举报

今天问老师了 老师说这个特殊 存在 常数池中。。
回复 使用道具 举报
字符串String和基本数据包装类像Integer、Byte都是final修饰的,就是常量,这几个做形参时都应该特殊,不随形参改变而改变
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马