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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝林杰 中级黑马   /  2014-3-22 21:19  /  1167 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Examble {
                String str=new String ("student");
                char[]ch={'a','b','c'};
                public static void main(String[] args) {
                Examble ex=new Examble();
                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';
                }
}
//输出结果是:
student and gbc
为什么结果不是?:
test  ok and gbc
//ps:我目前在自学面向对象(里面的知识搞得稀里糊涂的,很不清楚)
希望大牛级人物帮我把过程分析清楚(过程很重要) 谢谢啊

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 追逐 于 2014-3-22 21:43 编辑
  1. /*
  2. 因为String类是一个常量
  3. 当你将字符串定义好的时候。str就已经存在于常量池中了。

  4. */

  5. public class Examble {
  6.                 String str=new String ("student");
  7.                 char[]ch={'a','b','c'};
  8.                 public static void main(String[] args) {
  9.                 Examble ex=new Examble();
  10.                 ex.change(ex.str,ex.ch);
  11.                 System.out.println(ex.str+"and");
  12.                 System.out.println(ex.ch);

  13.         }
  14.                 public void change(String str,char ch[]){
  15.                         /*
  16.                                                 你在这里改变这个str的值是成功的。如果你在这里面直接输出肯定可以输出。test ok
  17.                                                 但是这并不是你根本性的把str的值改变了。只是暂时性的把str的引用指向了test ok而已。
  18.                                                 当这个函数执行完毕后。这个函数就已经被释放了。而str的引用自然而然的就回到了student上
  19.                                                 如果我的解释你看不懂。你可以去看看毕老师视频上讲解String类的部分。我相信你看了后会更清晰的
  20.                                                 */
  21.                                                 str="test ok";
  22.                                                 System.out.println(str);
  23.                         ch[0]='g';
  24.                 }
  25. }
复制代码
这个是现在的运行结果。希望的解答你给你带来帮助

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
楼主看看这样行不行:
  1. public class Examble {
  2.                 String str=new String ("student");
  3.                 char[]ch={'a','b','c'};
  4.                 public static void main(String[] args) {
  5.                 Examble ex=new Examble();
  6.                 ex.change(ex.str,ex.ch);
  7.                 System.out.println(ex.str+"and");
  8.                 System.out.println(ex.ch);

  9.         }
  10.                 public void change(String str,char ch[]){
  11.                         str=new String("test ok");
  12.                         ch[0]='g';
  13.                 }
  14. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
  1. class Examble
  2.          {
  3.                 String str=new String ("test  ok");
  4.                 char[]ch={'a','b','c'};

  5.                 public static void main(String[] args)
  6.                         {
  7.                 Examble ex=new Examble();
  8.                 ex.change(ex.str,ex.ch);
  9.                 System.out.println(ex.str+"and");
  10.                 System.out.println(ex.ch);

  11.         }
  12.                 public void change(String str,char ch[])
  13.                                 {
  14.                         str="student";
  15.                         ch[0]='g';
  16.                 }
  17. }
复制代码

这样试试,因为按照你那样的执行的话,在往里面传入new String ("student")就把test  ok 给覆盖掉了
,那样是执行不到的,把两个换个位置试试,不然的话在new String("test  ok");这样也是可以的
个人理解,上面是该好的,代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
补充一下,java中对象参数传递的是对象的引用,也就是change(String str ,char ch[])中str只是类中str的一个引用,当在change函数中给str赋值时,只是将change函数中的str指向了另一个字符串,但类中str指向的位置并没有变,画个图楼主更明白

无标题.png (24.03 KB, 下载次数: 21)

无标题.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马