当前位置:首页 > 开发 > 编程语言 > Java > 正文

Java函数调用方式——按值传递

发表于: 2013-09-24   作者:ayaoxinchao   来源:转载   浏览:
摘要: Java使用按值传递的函数调用方式,这往往使我感到迷惑。因为在基础数据类型和对象的传递上,我就会纠结于到底是按值传递,还是按引用传递。其实经过学习,Java在任何地方,都一直发挥着按值传递的本色。   首先,让我们看一看基础数据类型是如何按值传递的。   public static void main(String[] args) { int a = 2;

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也是按值传递,只不过传递的时候不是直接传递对象,而是传递引用的值,引用指向的对象相同而已。

 

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

Java函数调用方式——按值传递

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
java中的按值传递图例讲解 我想通过图片和例子更加有助于理解这个概念。 按值传递重要特点:传递的
按值传递还是按引用传递 这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的
今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个
前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的
值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式
今天,我在一本面试书上看到了关于java的一个参数传递的问题:写道 java中对象作为参数传递给一个方
上一篇博客我大概介绍了函数的由来和函数的执行过程,接下来,我要说明一下函数在执行的时候参数的
在Java中,所有的方法参数,都是" 按值传递". 有那么一种说法,Java中基本类型是按值传递,对象是按引用
在Java中,所有的方法参数,都是"按值传递". 有那么一种说法,Java中基本类型是按值传递,对象是按引用
在Java中,所有的方法参数,都是"按值传递". 有那么一种说法,Java中基本类型是按值传递,对象是按引用
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号