不是说java中方法的参数是 值传递 吗,为什么 数组 和 容器类 会例外呢,什么原因(底层实现)大家说说啊

解决方案 »

  1.   

    值传递的意思是把变量的内容传过去。对于基础类型的参数,起变量存储的就是它的值,例如对于int a=5,其内容就是5.但像数组之类的,或者对象,其变量的内容是存储所在的内存地址,作为参数传过去的时候,传的就是地址的值
      

  2.   

    数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
      

  3.   

    简单数据类型是值传递,如int,boolean等
    复杂数据类型都是引用传递,如由object继承而来的所有类型
      

  4.   

    那你意思是对象都是以用传递了;
    那么string对象是对象的例外还是怎么回事啊
      

  5.   

    string类型是怎么回事呢,是因为它是final的还是因为他的存储方式啊
      

  6.   

    我记得好像在哪看过说java中的参数的传递与 c c++ 是不同的,那么除了c系列可以传指针参数之外 java与他们还有其他什么不同的吗
      

  7.   

    基本类型是值传递,对象是引用传递
    例如:
    void method1(int i) //值传递void method2(Object o) //引用传递
      

  8.   


    String对象也是引用传递的。
      

  9.   

    (一) 从编译原理的角度讲,所有那些无法通过形参来修改实参本身的传递机制都是“值传递”,在JAVA中,你只能通过在形参上调用方法来修改实参所引用的那个对象,却修改不了实参本身(不能使它引用到另个对象),如:   
      void   f(ArrayList   list)   {   
            list   =   new   ArrayList();         //不影响外边的实参。   
      }   
      所以从这个角度,JAVA中根本就没有“引用传递”(不像C#中,真的有引用传递,只需要加个ref或out关键字,就不仅可以修改实参所引用的对象,还能修改实参本身)。   
      这种说法并非没有道理,因为如果说“通过一个具有索引功能的东西来修改它所索引的那个东西”就算引用传递的话,那么也可以任何语言的参数传递都可进行引用传递了。那你说Windows   API中和各种HANDLE算不算“引用传递”呢?   
        
      (二)在JAVA中,除了内建类型的变量,“一切都是引用”,所以传递一个非内建类型的参数,当然也就是传递一个引用,所以,也可以说JAVA中所有的(除非内建类型)参数传递又“都是引用传递”。   关键是看你怎么理解“引用”和“引用传递
      

  10.   

    这里最关键的是  String 对象也是对象,
    比如 void method(String s){
    s=s+"hello world";
    }
    的时候传进来的s在该方法体以外并没有改变,11,12楼这个是怎么解释的呢
      

  11.   

    String类是Final类,是不可改变的
      

  12.   

    你在这里
    void method(String s){
    s=s+"hello world";
    }
    假如你以前的s是指向“china”的地址的拷贝,调用method之后指向的是“china hello world”而以前的字符串变量依然指向的是“china”
      

  13.   

    final类型我试过了,我自定义的final类型是可以改的,(也就是说是所谓“引用”);另外我还试了一下  Boolean 和 Integer 两个包装类的对象,他们都是值传递,其他的包装类就没有一一去试了;
      

  14.   

    我说的final指的是他的属性是final而非类是final,请看String源代码:public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence
    {
        /** The value is used for character storage. */
        private final char value[];//注意我说的是这个final,她表示什么意思,你知道吧!
      

  15.   

    怎么说呢,还是不大清楚,如果是因为这里的final而无法改变他的值得话,那我们一般用的s=s+"abc"也是不可以的?我也可能是对你的解释有误解;你再解释一下了
      

  16.   

    因为String是final,所以s是一个常量,当你对它进行操作时,系统给它重新分配了一块内存空间,而不是再原来的基础上进行操作!
      

  17.   


    public class test {
    public static void main(String[]args){
    String  s="china";
    //调用之前的s
    System.out.println(s);
    //调用method,关键是这里,s指向的常量池中的“china”的地址的拷贝传递给method方法
    //在method方法当中,stemp也指向了“china”,在method方法当中,把stemp的指向改变了,但是s的指向没有改变
    method(s);
    //调用之后
    System.out.println(s);
    }
    public static void method(String stemp){
    //testInteger.fl
    stemp=stemp+"hello";
    }
    }刚才没有粘上去。
      

  18.   

    看我BLOG上的文章:http://blog.csdn.net/Mailbomb/archive/2008/07/19/2677690.aspx
      

  19.   

    和String不同的类的情况public class test {
    public static void main(String[]args){
    myclass bb=new myclass(100);
    //调用之前
    System.out.println(bb.getStatue());
    //调用method
    method(bb);
    //调用之后
    System.out.println(bb.getStatue());
    }
    public static void method(myclass xx){
    //testInteger.fl
    xx.setStatue(1000000);
    }
    }
    class myclass {
    private int statue;//这个时候要注意这个属性成员并不是final,我们可以改变之
    myclass(int statue){
    this.statue=statue;
    }
    public void setStatue(int statue){
    this.statue=statue;
    }
    public int getStatue(){
    return this.statue;
    }
    }
      

  20.   

    我们只能改变的是类的状态,改变的是她的属性成员,对于她原先的引用的地址的值,如果你改变了,原先的地址是不会跟着改变的这就是java中的值的传递,传递引用的地址。
      

  21.   

    提醒注意,List也是引用传递.一不小心就会骗死人
      

  22.   

    简单数据类型是值传递,如int,boolean等 
    复杂数据类型都是引用传递,如由object继承而来的所有类型
      

  23.   


    这个传引用或者传值就看怎么说了.怎么说都可以自圆其说.
    比如说传值 对基本数据类型那就是值
    对于对象就是对象的地址就好像指针.String也是,但是String是不可变的 看前几楼的源码.说传引用的那就是引用啦.
      

  24.   

    貌似java中只有值传递.对象类型也是值传递,只不过传递进来的是对象的地址引用.
      

  25.   

    现在主要是说这个  String类和包装类  是怎么弄的啊
      

  26.   

    对于String是个引用类型,只不多有点特殊,也就是它所指向的内存相当于完整内存
    就是统一操作,不能单独操作,要是重新赋值,则重新分配内存,也是完整的,原来的内存还在,只不过没了引用成了垃圾内存要避免这样就看看StringBuffer吧,String的升级版
      

  27.   

    不是说java只有值传递的吗???
    参数传递的只是一个拷贝,参数返回是这个拷贝销毁