黑马程序员技术交流社区

标题: 一到小题 [打印本页]

作者: 韩冬    时间: 2013-6-29 22:51
标题: 一到小题
本帖最后由 孙百鑫 于 2013-7-1 07:19 编辑

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.print(ex.str+" and ");
    Sytem.out.print(ex.ch);
  }
  public void change(String str,char ch[]){
    str="test ok";
    ch[0]='g';
  }
}

这个题目的结果是good and abc 还是good and gbc啊?感觉好混乱,有没有高手给解释一下啊,在线等。。


作者: 肥猫    时间: 2013-6-29 23:09
乱78糟的代码,错误数不清.首先,你的CHANGE方法是非静态的,主函数无法调用.而且看你想要的答案应该是进行字符串和字符连接,可你字符数组又没进行遍历.怎么操作?
作者: 秩宇    时间: 2013-6-29 23:18
Good and abc
形式参数属于局部变量,出了方法就失效了
作者: zms2100    时间: 2013-6-30 00:48
肥猫 发表于 2013-6-29 23:09
乱78糟的代码,错误数不清.首先,你的CHANGE方法是非静态的,主函数无法调用.而且看你想要的答案应该是进行 ...

虽然是change方法是静态方法,但是有在主函数中创建该类的实例对象,所以通过对象调用非静态方法。
答案是: good and gbc吧,1、因为当给方法传递数组或集合变量引用时,在方法中可直接操作原先堆内存中的数据;2、而String以及基本数据类型等的变量引用传递给方法时会在方法中创建属于方法的局部变量引用,因此test ok赋值无效。(这是特殊的参数传递应用,在高新技术部分有提及)。
3、不需遍历是因为那个数组是char[]数组,因为直接打印数组变量会调用toString()方法,而char[]的toString方法就是以字符串形式打印数组中全部元素。
作者: 王广亚    时间: 2013-6-30 10:51
zms2100 发表于 2013-6-30 00:48
虽然是change方法是静态方法,但是有在主函数中创建该类的实例对象,所以通过对象调用非静态方法。
答案 ...

这个题我也有点迷惑,为什么对象调用change方法没有为成员变量附上值呢?如果我想调用这个方法让它赋上值该如何更改这个程序?
作者: zms2100    时间: 2013-6-30 11:30
王广亚 发表于 2013-6-30 10:51
这个题我也有点迷惑,为什么对象调用change方法没有为成员变量附上值呢?如果我想调用这个方法让它赋上值 ...

调用方法为成员变量赋值?你指的是不是传递String str,虽然在方法中进行赋值但是却没有被改变?
以下算是提醒,呵呵:  1、调用方法为成员变量赋值,在标准创建一个带成员变量的Java类时通过都会要求编写setXXX()和getXXX()方法(高新技术部分会说明符合这种格式的类可以叫做JavaBean,就可以调用JavaBean类中的特有功能,题外话),方法代码:  
public  void setXXX(String str){
    this.str = str;    //即将接收的str参数数据传递给同名的成员变量的str,this是指向该类的对象引用;
}
2、如果那个变量不是成员变量,那么就可以通过返回值的方式,将新的字符串数据返回,由原来的那个变量引用接收,例:   String sss = person.getSSS();   ,这些应该都记得的,算是提醒复习吧,O(∩_∩)O~




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