黑马程序员技术交流社区

标题: 什么是值传递什么是引用传递?java中怎么体现? [打印本页]

作者: 何竹冬    时间: 2013-1-9 21:44
标题: 什么是值传递什么是引用传递?java中怎么体现?
本帖最后由 何竹冬 于 2013-1-10 11:54 编辑

什么是值传递什么是引用传递?java中怎么体现?
作者: 汪叶庭    时间: 2013-1-9 21:49
基本数据类型赋值属于值传递;引用类型之间赋值属于引用传递。值传递传递的是实实在在的变量值;引用传递传递的是对象的引用地址。值传递后,两个变量改变的是各自的值;引用传递后,两个引用改变的是同一个对象的状态。
作者: 余善航    时间: 2013-1-9 21:51
java内存中,主要有两块存放数据的,一个叫栈,一个叫堆,基本数据类型都是存放在栈里面的,比如char,byte,short,int,long,float,double,boolean,int i=1;i和1都是存储在栈里面的复杂数据类型,比如自定义对象,MyObject o=new MyObject("参数");o这个引用变量(或者叫指针)是存放在栈里面的,我们new的空间(或者说这个对象的数据内存块)是存放在堆里面,o所代表的值就是堆里面内存块的首地址
作者: 张云杰    时间: 2013-1-9 22:04
楼上百度的就算了.. 不用发了..
作者: 张云杰    时间: 2013-1-9 22:05


作者: 张云杰    时间: 2013-1-9 22:06
我不知道版主怎么想的, 百度来的 都可以加分
作者: 罗利华    时间: 2013-1-9 23:08
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,
方法执行中形式参数值的改变不影响实际参数的值。
如下代码:
public class ValueTrans {
        public static void exchange(int a, int b) { //静态方法,交换a,b的值
                int temp;
                temp = a;
                a = b;
                b = temp;
        }

        public static void main(String[] args) {
                int i = 3;
                int j = 5;
                System.out.println("before call: " + "i=" + i + " j=" + j); //调用前
                exchange(i, j); //值传递
                System.out.println("after call: " + "i=" + i + " j=" + j); //调用后
        }
}
引用传递:也称为传地址。方法调用时,
实际参数的引用地址,被传递给方法中相对应的形式参数,
在方法执行中,对形式参数的操作实际上就是对实际参数的操作,
方法执行中形式参数值的改变将会影响实际参数的值。
如下代码:
class Book {
        private String name;

        Book(String name) { //构造方法
                this.name = name;
        }

        public void change(Book b, String n) { //对象作为参数
                b.name = n;
        }

        public void look() { //输出对象信息
                System.out.println("name: " + name);
        }
}

public class QuoteTrans {
        public static void main(String[] args) {
                Book b = new Book("java");
                System.out.print("before call: "); //调用前
                b.look();
                b.change(b, "c++"); //引用传递,传递对象b的引用,会修改对象b的值
                System.out.print("after call: "); //调用后
                b.look();
        }
}
作者: 余善航    时间: 2013-1-9 23:46
张云杰 发表于 2013-1-9 22:04
楼上百度的就算了.. 不用发了..

真正不是看你怎么来的       只要你了解了   哪怕是搜的    看完了懂了   是百度的又怎么样   

百度这么简单  都没人百度      
其实  这也是解决问题的渠道罢了





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