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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© .Mr 中级黑马   /  2013-12-6 23:37  /  1113 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 .Mr 于 2013-12-7 16:38 编辑

public class Ex{
        public static void main(String args[]){
        String s="abc";
        s="gav"
        System.out.println(s);
        }
} 这个打印出来是 gav
和下面代码打印相比的话,下面是调用函数的地方出了问题吗?请帮我解答一下,谢谢
以下代码打印出来是:good and gbc
public class Example{
        String str = new String("good");
        char[] ch = {'a','b','c'};
        public static void main(String args[]){
        Example ex = new Example();
        ex.change(ex.str,ex.ch);
        System.out.println(ex.str+"and");
        System.out.println(ex.ch);
        }
        public void change(String str,char ch[]){
        str = "test ok";
        ch[0]="g";
        }
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

4 个回复

倒序浏览
public void change(String str,char ch[]){}
在调用change()时相当于把str对象复制了一份 (和main()中的str不在有任何关系)  ch[]紧紧是把地址传递过去   直接通过操作地址来修改数据

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
在主函数中运行ex.str,str这个对象存储的是最开始赋予的good,在change函数中并没有改变其存储的内容,或者说你在change中所用改变str在堆内存中内容的那种赋值方法是不对的,光从语法上看是没有任何问题的语句,所以编译时不会报错,得到的结果只能是good;而ch[0]='g';,确实是用g取代了原来位置上的a~

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
四五六七八 发表于 2013-12-7 00:41
public void change(String str,char ch[]){}
在调用change()时相当于把str对象复制了一份 (和main()中 ...

谢谢啦  懂了。。。
回复 使用道具 举报
影凡 发表于 2013-12-7 01:22
在主函数中运行ex.str,str这个对象存储的是最开始赋予的good,在change函数中并没有改变其存储的内容,或者 ...

谢谢啦  懂了。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马