理解java值传递,必须理解c#里的引用传递,附实例,欢迎大家补充

理解java值传递,必须理解c#里的引用传递,附实例,欢迎大家补充

话不多说直接上实例

测试代码块:

public class Test {
    public static void main(String[] args) {
        Animal tiger=new Animal("老虎");//创建老虎对象,年龄
        Animal lion=new Animal("狮子");//创建老虎对象,年龄

        System.out.println("change之前tiger: "+tiger);
        System.out.println("change之前lion: "+lion);

        change(tiger,lion);

        System.out.println("change之后tiger: "+tiger);
        System.out.println("change之后lion: "+lion);

    }


    public static void change(Animal animal1,Animal animal2){
        //当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变
        animal1.name="老虎儿子";

        //但在方法内部对对象引用的改变是不会影响到被调用者的
        animal2 =new Animal("狮子儿子");//引用改变 指向新的对象 "狮子儿子"

        System.out.println("**********************change结束**************************");
    }

}

控制台打印结果:

在这里插入图片描述

总结

Java语言的方法调用只支持参数的按值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但在方法内部对对象引用的改变是不会影响到被调用者的。C++和C#中可以通过传引用或传输出参数来改变传入的参数的值。在C#中可以编写如下所示的代码,但是在Java中却做不到。

c#代码块:

using System;

namespace CS01 {

    class Program {
        public static void swap(ref int x, ref int y) {
            int temp = x;
            x = y;
            y = temp;
        }

        public static void Main (string[] args) {
            int a = 5, b = 10;
            swap (ref a, ref b);
            // a = 10, b = 5;
            Console.WriteLine ("a = {0}, b = {1}", a, b);
        }
    }
}

说明:Java中没有传引用实在是非常的不方便,这一点在Java 8中仍然没有得到改进,正是如此在Java编写的代码中才会出现大量的Wrapper类(将需要通过方法调用修改的引用置于一个Wrapper类中,再将Wrapper对象传入方法),这样的做法只会让代码变得臃肿,尤其是让从C和C++转型为Java程序员的开发者无法容忍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值