黑马程序员技术交流社区

标题: 有关定义String在内存中存放的问题 [打印本页]

作者: zhaoyue    时间: 2015-7-19 12:52
标题: 有关定义String在内存中存放的问题
老师上课讲引用数据类型的参数传递,形式参数的改变对实际参数是有直接影响的;
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,发现和老师讲的不一致,求解!
作者: 小虎199406    时间: 2015-7-19 12:59
本帖最后由 小虎199406 于 2015-7-19 13:00 编辑

你这样打印的只是主函数中的a    而并不是method方法中的a  System.out.println(method(a));
才是输出 method(a)方法中   return 的a

作者: zhaoyue    时间: 2015-7-19 13:45
本帖最后由 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定义的时候是存在于栈还是堆;



作者: 小虎199406    时间: 2015-7-19 13:54
zhaoyue 发表于 2015-7-19 13:45
那我再给几句你看看
int [] arr={1,2,3,4,5};
change(arr);

有完整代码么?
作者: 小虎199406    时间: 2015-7-19 13:55
本帖最后由 小虎199406 于 2015-7-19 13:58 编辑
zhaoyue 发表于 2015-7-19 13:45
那我再给几句你看看
int [] arr={1,2,3,4,5};
change(arr);
堆内存中
作者: zhaoyue    时间: 2015-7-20 21:05
小虎199406 发表于 2015-7-19 13:55
堆内存中

今天问老师了 老师说这个特殊 存在 常数池中。。
作者: a12366456    时间: 2015-7-20 21:51
字符串String和基本数据包装类像Integer、Byte都是final修饰的,就是常量,这几个做形参时都应该特殊,不随形参改变而改变




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2