zoukankan      html  css  js  c++  java
  • java值传递

    Java使用按值传递的函数调用方式,这往往使我感到迷惑。因为在基础数据类型和对象的传递上,我就会纠结于到底是按值传递,还是按引用传递。其实经过学习,Java在任何地方,都一直发挥着按值传递的本色。

    首先,让我们看一看基础数据类型是如何按值传递的。

    public static void main(String[] args) {
    		
    	int a = 2;
    	calculate(a);
    	System.out.println(a);
    	
    }
    
    public static void calculate(int param) {
    	param += 3;
    	System.out.println(param);
    }


    结果

    5
    2

     这样的结果根据按值传递,并不难理解。

    其次,让我们来看看复杂的对象时如何保持自己的“贞操”,而仅仅是把引用这个“才艺”展示给人们。

    public static void main(String[] args) {
        // 包装类型,不可变类型	
    	Integer b = new Integer(2);
    	calculate2(b);
    	System.out.println(b);
    	
        // 日期类型,目标方法改变对象值,当前日期2013-09-24
    	Date d1 = new Date();
    	claculate3(d1);
    	System.out.println(d1);
    		
        // 日期类型,目标方法仅读取对象值,当前日期2013-09-24
    	Date d2 = new Date();
    	calculate4(d2);
    	System.out.println(d2);
    }
    	
    public static void calculate2(Integer param) {
    	param += 3;
    	System.out.println(param);
    }
    	
    public static void claculate3(Date date) {
    	date.setDate(date.getDate() + 1);
    	System.out.println(date);
    }
    	
    public static void calculate4(Date date) {
    	date = new Date(date.getYear(), date.getMonth(), date.getDate() + 1);
    	System.out.println(date);
    }


    结果

    5
    2
    Wed Sep 25 20:24:32 CST 2013
    Wed Sep 25 20:24:32 CST 2013
    Wed Sep 25 00:00:00 CST 2013
    Tue Sep 24 20:24:32 CST 2013


    从结果可以看出:

    一、包装类型作为不可变的对象,原有的Integer对象并没有改变,所以输出与基础类型的一样。

    二、日期类型是可变对象,当仅仅是读取原有对象中的值时,没有问题,调用函数中的打印结果不改变,和当前日期保持一致,只是目标函数中打印的是新对象的值,所以两次打印结果不同;当在目标方法中将原有对象改变,那么两次打印的都是原有对象的值,所以结果相同,并且与初始的new Date()不一样。

    所以说呢,基础数据类型按值传递很容易理解,但是对于对象,Java也是按值传递,只不过传递的时候不是直接传递对象,而是传递引用的值,引用指向的对象相同而已。

    以我的水平就能写这么多,希望大牛们觉得不对的地方,给我指出来。。。


  • 相关阅读:
    QTP11安装包 免费汉化版 / QTP11破解版下载
    linux查看操作系统版本、内存信息
    Oracle 性能优化总结
    CV-物体检测-tensorflow
    pytest使用-文火微烹pytest
    高科技通缩和比特币投资
    格局观修炼
    陈春花推荐的三本书是什么 back to basic -- management
    长期价值主义
    参与感,对于一个人究竟有多重要?
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3339406.html
Copyright © 2011-2022 走看看