java 值传递的个人理解

/**
 * Created by kodulf on 2017/4/5.
 */
public class ZhiChuanDi {

    /**
     * 值传递,原来的值相当于是使用final修饰了,参数值可以随意修改
     *
     *
     * 值传递,传递值,如果是基本数据类型,那么传递的就是数据的值,如果是引用数据类型,那么就是传递的地址
     * 总体来说,默认传给参数的值是不会变的,但是参数里面的内容是会变的
     * 这个就相当于是原来的值使用final 修饰了参数(一定要注意了,这里是原来的值),基本数据类型是不变的,但是应用数据类型的引用是不会变的,但是里面的内容是可以变的。
     * 而方法里面的参数的值,如果你也想要它和原来的值一样,那么就也要使用final 来修饰(像是作用在方法里面的内部类(例如匿名内部类),如果要访问到方法里面的参数,那么该变量最好修饰为final的)
     * 值传递的测试,需要测试3个方面:
     * 1: 测试传递一个基本数据类型的
     * 2: 测试传递一个String
     * 3: 测试传递一个对象
     */
    public static void main(String[] args){
        PassTest passTest = new PassTest();
        passTest.var = 100;

        //测试传递一个基本数据类型
        int num = 11;
        passTest.changeNum(num);
        System.out.println(num);
        System.out.println("++++++++++++++++++++++++++++++++++++++++++");

        //测试传递一个String
        String s = "原文";
        System.out.println("String的hashcode ="+s.hashCode());
        passTest.changeString(s);
        System.out.println("调用完change方法后的String的hashcode ="+s.hashCode());
        System.out.println(s);
        System.out.println("++++++++++++++++++++++++++++++++++++++++++");


        //测试传递一个对象
        System.out.println("调用changeObject 之前的对象的hashcode ="+passTest.hashCode());
        changeObject(passTest);
        System.out.println("调用changeObject 之后的对象的hashcode ="+passTest.hashCode());
        System.out.println(passTest.var);
    }

    /**
     * 传递一个对象
     * @param passTest
     */
    public static void changeObject(PassTest passTest){
        System.out.println("changeObject 方法里面获取到的对象的hashcode ="+passTest.hashCode());
        passTest.var = 0;
        System.out.println("changeObject 方法里面改变了成员变量的之后的对象的hashcode ="+passTest.hashCode());
    }
}


class PassTest{
    int var = 88;

    /**
     * 改变一个基本数据类型的
     * @param num
     */
    public void changeNum(int num){
        num = 99;
    }

    /**
     * 值传递,传过来的是什么呢?
     * String 传过来的是它在内存中的地址
     * @param a
     */
    public void changeString(String a){
        System.out.println("方法中获取到的String的hashcode ="+a.hashCode());
        a = new String("changedString");
        System.out.println("方法中赋新值后的String的hashcode ="+a.hashCode());
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值