zoukankan      html  css  js  c++  java
  • Java函数调用方式按值传递

      广州疯狂软件学院拥有三大课程体系包括:Java课程,Android课程,iOS课程,疯狂软件年终钜惠,报名Java就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询。

      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);

      }

      输出结果为:

      Java代码

      5

      2

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

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

      Java代码

      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);

      }

      输出结果为:

      Java代码

      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培训、iOS培训新年钜惠,报名Java就业班免费赠送Java基础班,报名iOS就业班免费赠送iOS基础班,本月火速抢座中,为回报广大新老学员,值此新年之际推出报读就业班赠送基础班的活动。

      -----------------------------------2014年初活动--------------------------------------

      疯狂软件Java学习班方向:

      1.报读JavaEE就业班赠送基础班课程。

      2.开班一次性(一个月内)交清JavaEE就业班学费,赠送基础班全套课程。

      疯狂软件iOS学习班方向:

      1.报读iOS应用+手游就业班赠送iOS基础班课程。

      2.开班一次性(一个月内)交清iOS应用+手游就业班就业班学费,赠送基础班全套课程。

  • 相关阅读:
    VS GIT 使用入门---我只是搬运工
    虚拟机安装_1_wincc_matriton
    程序设计入门—Java语言 第六周编程题 1 单词长度(4分)
    程序设计入门—Java语言 第五周编程题 2井字棋(5分)
    JAVA入门 第五周 1多项式
    第四周编程作业 2念整数
    第四周编程作业 1素数和(5分)
    第3周作业第2题 数字和特征
    第3周作业第1题 奇偶个数
    第2周作业第2题信号报告
  • 原文地址:https://www.cnblogs.com/gojava/p/3540220.html
Copyright © 2011-2022 走看看