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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public class Example{
  2.         String str="good";
  3.         char[]ch={'a','b','c'};
  4.         public static void main(String args[]){
  5.                 Example ex=new Example();     
  6.         ex.change(ex.str,ex.ch);                  //    1、我想知道这个地方调用change方法是“ex.str”这个传入的是什么。String变量不是引用型变量吗?应该是传入的地址值吧?
  7.         System.out.print(ex.str+" and ");     //    3 、既让操作的是同一个实体为什么此处打印时结果会是“good and呢?为什么不是="test ok and”?
  8.         System.out.print(ex.ch);
  9.         }
  10.         public void change(String str,char ch[]){
  11.                 str="test ok";                                    //    2、既然上面调用是传入的是地址值那这个局部的str和那个成员str操作的应该是同一个实体喽?
  12.         ch[0]='g';
  13. }
  14. }
复制代码

6 个回复

倒序浏览
1,ex.str”这个传入的是good,地址是指向地址传人的是值。String是引用型变量。2,我的理解是在这里应该是变量的形式存在。没有new String(),所以没有改变。。。
回复 使用道具 举报
我觉得在change方法里str的地址值指向了"test ok"。但是这只是在局部,方法调用完成后。str还是指向"good"的地址值。 除非String类型有操作改变自己内容但是不改变地址值的方法。 char[0]虽然改变了,但是没有改变地址值,只是改变了这个地址值中的char的内容。 如同在成员中搞一个Collection,在change中给Collection添加元素。这个Collectiond的地址值是没变的,只是在这个Collection中添加了元素而已。
回复 使用道具 举报
一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)。
一个方法可以改变一个对象参数的状态。
一个方法不能实现让对象参数引用一个新的对象。
以上摘自《Java核心技术》

本例属于第三条,解释起来就是说,在方法中的str虽然指定了一个新的对象,但是方法外的str指向的还是 “good” ,而且方法中的str在方法结束之后就被删除了,所以原来的变量值并没有被改变。
回复 使用道具 举报
oxf974025918 发表于 2013-6-30 12:44
1,ex.str”这个传入的是good,地址是指向地址传人的是值。String是引用型变量。2,我的理解是在这里应该是变 ...
  1. public class Example{
  2.         String str=new String("good");    //此处new String("good");    但是您看看这个结果还是一样
  3.         char[]ch={'a','b','c'};
  4.         public static void main(String args[]){
  5.                 Example ex=new Example();      
  6.                 ex.change(ex.str,ex.ch);      
  7.                 System.out.print(ex.str+" and ");
  8.                 System.out.print(ex.ch);
  9.         }
  10.         public void change(String str,char ch[]){
  11.                 str="test";
  12.                 ch[0]='g';
  13.                 //System.out.print(str);
  14.         }
  15. }
复制代码
回复 使用道具 举报
王靖远 发表于 2013-6-30 13:00
我觉得在change方法里str的地址值指向了"test ok"。但是这只是在局部,方法调用完成后。str还是指向"good" ...

你的意思是说str="test ok"; 这句语句又创建了各实体吗,把str又指向了这个实体的地址值?也就是说当str="test ok"; 这句执行之前成员变量str和形式参数(public void change(String str,char ch[]){ )里的str还是指向同一个地址值的。对吗?
回复 使用道具 举报
秩宇 发表于 2013-6-30 14:28
一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)。
一个方法可以改变一个对象参数的状态。
一 ...

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