我的翻译如下:
Java在参数中仅仅是值传递。当一个对象的实例被当作一个参数传入一个方法时,这个参数的值时这个对象的一个引用。对象的内容可以在这个方法的内部改变,但是这个对象的引用时不会变的。

解决方案 »

  1.   

    public static void main(String args[]){String str=new String("World");char ch[]={'H','e','l','l','o'};change(str,ch);System.out.println(str + "and" + ch);}public static void change(String str, char ch[]){str="Changed"; ch[0]='C';}}那这个输出将是什么?解释一下,我很糊涂
      

  2.   

    是ChangedandCello,因为你没有加空格,所有输出这个。
    如果没有Change(str,ch)这句应该输出WorldHello,
    加上Change(str,ch)后就调用Change函数,吧str的内容变成
    了Changed了,ch[0]的内容变成C了,所以出现上面的结果。
      

  3.   

    呵呵,这和java认证考试上面的答案不一样哦
    答案输出是WorldandCello,答案错了?
      

  4.   

    不好意思,我作了下测试,结果是Worldand[C@92d342,前面没变,后面是ch数组的地址。
    我把程序改动了一下
            
    public class FJava {
    String str=new String("World");
             char ch[]={'H','e','l','l','o'};         public static void main(String args[]) {
    FJava fjava=new FJava();

    fjava.change(fjava.str,fjava.ch); }
    public static void change(String str, char ch[]) { str="Changed"; ch[0]='C';
    System.out.println(str+"and"+String.valueOf(ch)); }
    }
    现在能得到ChangedandCello了,现在分析一下可能的原因,你刚才的str是定义在静态方法main中的,所以println调用的就是原来的str,他的值是不会改变的。
      

  5.   

    To:promised(乐乐天) ( 一级(初级)
    好好看书去。不要把你的c/C++的观念带来。
    你也要看看c/c++中关于指针,以及指针引用方面的书籍。TO:Diadem(可乐可口) 
    答案是对的。
      

  6.   

    谢谢教诲,可是上面的程序确实是Worldand[C@92d342 结果阿,后面的不就是ch的地址吗?
      

  7.   

    To zosatapo(隆杰@宗山太保)
    请多指教,能否给我解释一下为什么会那样输出也谢谢promised(乐乐天)
      

  8.   

    认证的答案是错的。其实这你只要亲自编译运行一下就知道了。输出是类似Worldand[C@92d342的东西,ch是数组句柄,数组句柄本质上就是java中的指针,是地址值,把它当字符串输出,自然输出的是地址值。在某些方面,java还脱不了c++的影子,它是怎么来的?
      

  9.   

    其实在Java中对值传递的问题,你只要记住以下两点就可以了:
      1.如果该类的方法实现中引用的是类的变量,那么在方法使用以后,该值不会
    发生改变.(实际上在对变量作值传递时,Java是将该变量的值作了一个Copy)
      2.如果该类的方法实现中传入的是一个对象,比如数组对象或者字符串对象,那么在方法完成以后,该值发生变化.
      

  10.   

    更正一下,看了object的tostring的文档,[C@92d342应该不是数组的内存地址,应该是按object的tostring方法输出的,但保留自己的两点看法:1、认证答案有错;2、数组本质上是一个指针。
      

  11.   

    To luzegang(求知者) 
    我还有些不明白,java里面任何东西都是对象(Everything is an Object)
    那我怎么区别传递的参数是object还是其他的
      

  12.   

    我理解如果是object,那在传递的时候,传递形式应该是ClassName.Object,如果是其他,可能不是以这种形式来传递。
      

  13.   

    把酒言欢老兄的话应做如下理解:
    一却都是传值,故在被调用的方法中,总有你传递的参数的拷贝。无论其是基本型(int)或是object。
    class test{
    public static void main(String args[]){    String str=new String("World");    char ch[]={'H','e','l','l','o'};    
        System.out.println(change(str,ch) + ":and:" + ch[0]);}public static String change(String str, char ch[]){    str="Changed"; 
        ch[0]='C';
        return str;}}