侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Java  /  管理员 发布于 2年前   164

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

 输出结果为:

52

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

 

 

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

 

public static void main(String[] args) {    // 包装类型,不可变类型Integer b = new Integer(2);calculate2(b);System.out.println(b);    // 日期类型,目标方法改变对象值,当前日期2013-09-24Date d1 = new Date();claculate3(d1);System.out.println(d1);    // 日期类型,目标方法仅读取对象值,当前日期2013-09-24Date 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);}

 输出结果为:

52Wed Sep 25 20:24:32 CST 2013Wed Sep 25 20:24:32 CST 2013Wed Sep 25 00:00:00 CST 2013Tue Sep 24 20:24:32 CST 2013

 从结果可以看出:

 

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

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

 

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

 

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


  • 上一条:
    通过原型实现javascript Array的去重、最大值和最小值
    下一条:
    Java打印当前目录下的所有子目录和文件
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • java正则表达式彻底研究(0个评论)
    • java正则表达式验证函数(0个评论)
    • MVC、MVP和MVVM分别是什么(0个评论)
    • java 单例模式(饿汉模式与懒汉模式)(0个评论)
    • 近期文章
    • 在Laravel应用程序如何减少代码重复编写(0个评论)
    • 在laravel项目中提高安全性方式推荐:CSP内容安全策略(0个评论)
    • 在go语言中从值中获取常量名称代码示例(0个评论)
    • 在go语言中如何通过名称获得结构字段和值代码示例(0个评论)
    • 在go语言中用JQuery + html2canvas实现拍摄浏览器的屏幕截图示例(0个评论)
    • 人生感悟分享:讲一个大学毕业生到社畜老狗的蜕变心路历程(0个评论)
    • laravel9框架报错Target class... does not exist解决方式(0个评论)
    • Laravel 9.48版本发布(0个评论)
    • Meta高级工程师现身说法:程序员干得越久,代码写得越少?(0个评论)
    • 本站zongscan祝大家除夕快乐,2023有奔头(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-11
    • 2018-03
    • 2020-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客