JAVA传参到底是传引用还是传值, JAVA可以指定传引用类型的参数吗?

最近要搞安卓开发,对我来说完全是新手,无论是Java 还是 android stuido,对于Java传参问题,网上搜索了半天,都是长篇大论,最后终于找到个能说的简单易懂的人了,算是有个结论了,这里记录一下。

  • 代码转自知乎java到底是值传递还是引用传递?Intopass的回答。

  •  
    • 如果已经入手一段时间JAVA,就会发现Dog d; 这样的声明只会产生一个Dog对象的指针,它没有任何空间,需要使用d=new Dog(); 为其划分空间后才能使用。这是对于对象。
    • 如果我这样写int a; 那么a是可以立即被使用的,它已经被划分好了空间。因为它是基本类型变量。

    也就是说,当我传参传入的是int的话,其实是将值复制了一份,形参和实参它们两个只有值是一样的,而我传入的是String的话,是将String的指针复制了一份,形参和实参(都指的是指向对象的指针)指向的对象是一样的。

  • 提问:那是不是意味着传对象就相当于传引用了呢?

    没错。但你也要考虑清楚,如同上述代码第二个例子,text="windows";,你要理解这究竟是什么意思,它实际上是重载运算符,等价于text=new String("windows");,说到这里你应该明白了,这只是给text指针分配了一个新的地址空间而已,原空间的str没有任何改变。

  • 提问:如果我写int[] iArray={1,3,5,7,9}; 将其传入函数,为什么可以修改?

    很好理解,你可以按照JAVA的理解,数组也是对象,因此可以成功将引用传入函数,而由于数组元素类型都是int,不存在重载赋值运算符为new之类的操作,因此是可以修改的。

    你也可以按照C语言的理解,传入的是数组首元素的地址,因此可以进行修改。

  • 提问:如果我想传int引用怎么办?

    实测Integer对象是无法达到传引用的目的的,因此我能想到的方法就是封装一个int类。因为目前水平有限,还不会重载运算符,因此我简单的进行了一个封装,看官明白一下意思就行了:

    这样将Intege型的变量传入后,即可通过setValue方法对值进行修改。

顺带推荐个免费隧道,远程办公可用:深隧系统-内网穿透

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值