java只通过值来传递参数。java中没有指针,所以不可能通过地址来进行参数传递。

解决方案 »

  1.   

    OK.
    那么在上面那句话接着有两句话,你们看一下。
    1.When a object instance is passed as an argument to an called method,the value of the argument is a reference to the object.
    我的翻译是:当一个对象实例被作为一个参数传递倒一个调用的方法是,这个参数的值就是这个对象的引用。
    2.The contents of the object can be changed in the called method,but the object reference is never changed.
    我的翻译是:对象的内容可以被调用的方法改变,但是对象的引用不能。照刚才那句“java只按值来传递参数”,也就是说,参数代表的是数值。而第一句的意思却说,这个参数的值是这个对象的引用。不是矛盾了码?
      

  2.   

    首先,说明一下在JAVA中有:按值传递和按引用传递。
    下面是我对这两句话的理解,供大家参考。
    //1。当一个对象作为一个参数传递倒一个调用的方法时,这时是按引用传递,传递的是该对象的首地址。
    //2。这时对象的内容可以被它所调用的方法改变,而对象的引用是不变的。
    下面是一个按引用传递的例子:
    public class AboutPass

    public static void main(String[] args)
    {
    StringBuffer sa1= new StringBuffer("java");
    StringBuffer sa2=new  StringBuffer("javac");
    m(sa1,sa2);
    System.out.println(sa1\n+sa2);}
    public void m(StringBffer a1,StringBuffer a2)
    {
    a1.append(a2);
    a1=a2;}
    }
    out:   javajavac
           javac
      

  3.   

    "the object reference is never changed.
    ",是不是这个意思,在方法体中传给方法的句柄不能被改变(指向别处)。
      

  4.   

    To ourjava(激情男孩) 你的历程编译有error,AboutPass.java:7: 在静态上下文中不能引用非静态方法 m(java.lang.StringBuffer,java
    .lang.StringBuffer)
                    m(sa1,sa2);情解释
      

  5.   

    激情男孩,我好象在哪本书上看到Java只能pass by value啊。
    不知道我是不是记错了,那你看看下面这个程序:public class SL275
    {
      public static void changeInt(int val)
      {
        val = 55;
      }  public static void main(String args[])
      {
         int val;
         val = 11;
         changeInt(val);
         System.out.println("Int value is: " + val);
     }
    知道结果是什么吗?
    是11啊
    怎么解释啊
    那就算有pass by value和pass by reference两种,那怎么判断啊?
      

  6.   

    SL275的教程里有节大大三个字pass-by-value,可没有看见有pass-by-reference啊?
      

  7.   

    Java only pass arguments by value.这句话怎么翻译啊?
      我觉得是不是说的是基本类型的时候采用的值传递呀!
    在对象的时候采用传递句柄
      

  8.   

    Patrick_DK:
    我是这么理解的:
    在内存中你的程序中定义的两个val是完全两回事,也就是说内存中有两个val: changeInt中的val和main的val.
    而在JAVA中程序的执行是从MAIN开始的,发现MAIN中有完整的VAL,它就不会再到其它地方去找VAL了,相当于你定义的changInt方法是无效的。
    jin2001() :
    谢谢,你为我指出了BUG。
    上面这个程序是我临时做的没有多想,在JAVA中静态类是不能使用非静态方法的。
    public class AboutPass

    public static void main(String[] args)
    {
    StringBuffer sa1= new StringBuffer("java");
    StringBuffer sa2=new  StringBuffer("javac");
    m(sa1,sa2);
    System.out.println(sa1+"\n"+sa2);
    }
    public static void m(StringBffer a1,StringBuffer a2)
    {
    a1.append(a2);
    a1=a2;
    }
    }
    out:  javajavac
          javac