java中的值传递和引用传递的区别分析_java

传值---传递基本数据类型参数

复制代码 代码如下:

public    class           PassValue{
    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 = 10;
       int j = 100;
       System.out.println("before call: " + "i=" + i + "\t" + "j = " + j);//调用前
        exchange(i, j);                                                                    //值传递,main方法只能调用静态方法
        System.out.println("after call: " + "i=" + i + "\t" + "j = " + j);//调用后
    }
}

运行结果:

复制代码 代码如下:

        before call: i = 10        j = 100
        after    call: i = 10        j = 100
 

说明:调用exchange(i, j)时,实际参数i,j分别把值传递给相应的形式参数a,b,在执行方法exchange()时,形式参数a,b的值的改变不影响实际参数i和j的值,i和j的值在调用前后并没改变。
引用传递---对象作为参数

复制代码 代码如下:

class Book{
    String name;
    private folat price;
    Book(String n,    float ){                //构造方法
        name = n;
        price = p;
    }
    static  void  change(Book a_book,    String n,    float p){    //静态方法,对象作为参数
            a_book.name = n;
            a_book.price = p;
    }
    public void output(){        //实例方法,输出对象信息
        System.out.println("name: " + name + "\t" + "price: " + price);
    }
}
 public class PassAddr{
    public static void main(String [] args){
        Book b = new Book("java2",    32.5f);
        System.out.print("before call:\t");        //调用前
        b.output();
        b.change(b,    "c++",    45.5f);            //引用传递,传递对象b的引用,修改对象b的值
        System.out.print("after call:\t");            //调用后
        b.output();
    }
}

运行结果:

复制代码 代码如下:

        before    call:    name:java2        price:32.5
        after       call:    name:c++          price:45.5

说明:调用change(b,"c++",45.5f)时,对象b作为实际参数,把引用传递给相应的形式参数a_book,实际上a_book也指向同一个对象,即该对象有两个引用名:b和a_book。在执行方法change()时,对形式参数a_book操作就是对实际参数b的操作。

时间: 2024-07-31 23:16:07

java中的值传递和引用传递的区别分析_java的相关文章

java中重载、覆盖和隐藏三者的区别分析_java

重载:方法名相同,但参数不同的多个同名函数 注意:1.参数不同的意思是参数类型.参数个数.参数顺序至少有一个不同 2.返回值和异常以及访问修饰符,不能作为重载的条件(因为对于匿名调用,会出现歧义,eg:void a ()和int a() ,如果调用a(),出现歧义) 3.main方法也是可以被重载的 覆盖:子类重写父类的方法,要求方法名和参数类型完全一样(参数不能是子类),返回值和异常比父类小或者相同(即为父类的子类),访问修饰符比父类大或者相同 两同两小一大  注意:子类实例方法不能覆盖父类的

基于指针pointers和引用references的区别分析_java

指针用"*"和"->"操作符,引用用"."操作符,当然这是表面的区别.     1.引用必须代表一个对象,没有所谓的空引用.指针可以为NULL.即引用必须有初值,指针不然.所以在使用pointers之前,必须测试它是否为null.references不需要测试.     2.pointers可以被重新赋值,指向另一个对象,reference总是指向(代表)它最初获得的那个对象: 复制代码 代码如下: string s1("Nanc

Java中的值传递和引用传递

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?     答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本.指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的. Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言).    

Java中的值传递和引用传递实例介绍_java

复制代码 代码如下: package Object.reference; public class People {     private String name;     private int age;     public People(){     }     public People(String name, int age) {         super();         this.name = name;         this.age = age;     }    

java中如何区分值传递和引用传递

java中值传递和引用传递一直饱受争议难以区分,下面我通过几个例子来区分一下什么时间是值传递,什么时间是引用传递 1:首先先说值传递:基本类型(int ,float ,long,byte,short ,double, char,boolean)作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的 package com.test.list; public class Test1 { public static void main(String[] args) { int i

Java值传递和引用传递

先明晰一下文中值传递和引用传递的含义(关于对引用的定义的争议请参考评论区). 值传递:方法调用时,实参把它的值传递给对应的形参(或者说副本),方法执行中形式参数值的改变不影响实际参 数的值. 引用传递:也称为传地址.方法调用时,实参的引用(地址,而不是参数的值)被传递给方法中相对应的形参,在方法执行中,对形参的操作实际上就是对实参的操作,方法执行中形式参数值的改变将会影响实际参数的值. 两个看似没什么区别的代码 代码一 public static void main(String[] args)

java及C++中传值传递、引用传递和指针方式的理解_java

java的值传递理解: 代码1: public class Test { /** * @param args */ public static void main(String[] args) { StringBuffer buffer= new StringBuffer("colin"); SChange(buffer); System.out.println( buffer); } public static void SChange (StringBuffer str) { st

对象-java传递 ”值传递和引用传递“还是全部 “值传递”

问题描述 java传递 "值传递和引用传递"还是全部 "值传递" 若说值传递.基本类型是copy的值赋给形参,对象是把 堆中对象的 地址 传给 形参. 若说分为值传递和引用传递..引用传递 是因为这个传的地址,导致实参和形参 操作的都是同一块内存. 有点乱,像文字层次上的撕逼.. 若往引用传递方面思考,C++的指针又把我搅乱了.,java里不能直接管理内存,传递的不是 变量本身 的栈地址.而是变量的内容(值) 解决方案 java没有什么值传递引用传递,都是传递对象引

java的值传递和引用传递

java的值传递和引用传递 1. "="是赋值操作. 任何包含=的如+=.-=. /=等等,都内含了赋值操作. 不再是你以前理解的数学含义了,而+ - * /和 = 在java中更不是一个级别,换句话说, = 是一个动作,一个可以改变内存状态的操作,一个可以改变变量的符号,而+ - * /却不会. 这里的赋值操作其实是包含了两个意思: 1.放弃了原有的值或引用: 2.得到了 = 右侧变量的值或引用.Java中对 = 的理解很重要啊!!可惜好多人忽略了,或者理解了却没深思过. 2. 对于

源自一个面试的问题:字符串在函数的参数中是当成值传递还是引用传递。

问题描述 源自一个面试的问题:字符串在函数的参数中是当成值传递还是引用传递.这是测试方法: public void setA(String a) { System.out.println("In the setmethod before set:解决方案二:# " + a); a = "I am a student"; System.out.println("In the setmethod after set:解决方案三:# " + a); }