Java传值问题
Java传值问题
那位先生 发表于4年前
Java传值问题
  • 发表于 4年前
  • 阅读 54
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

前几天看【深入Java虚拟机】的时候看见关于Java的传值和传引用的问题,书上说Java一直都是传值的,而所谓的传引用实际上传的是“引用的值”(不是引用所指向的值),所以换句话说还是传值。

然后自己就做了几个测试

我先写了一个测试类

<!-- lang: java -->
public class Test{

public static void main(String []args){
Integer a =5;
System.out.println(test(a));//6
System.out.println(a);//5
}

public static Integer test(Integer b){
    b++;
    return b;
}
}

开始我以为输出的都会是6,因为对于类来说传的都是“引用值”,就像下面的StringBuffer

<!-- lang: java -->
public class Test1{
public static void main(String []args){
StringBuffer sb=new StringBuffer("asdf");
System.out.println(test(sb));//asdfh
System.out.println(sb);//asdfg
public static StringBuffer test(StringBuffer sb){
sb.append("h");}}

Integer和StringBuffer同样都是一个类,为什么前者就没有“传引用”的效果而后者就有呢?

后来在Java吧里问了一下 大致得出了结论

首先,由基本数据类型封装得来的类都是final,像String ,Long ,Integer... 所以他们的引用对象是不可以改变的,但是可以改变值,但是String,Long,Integer等类并没有提供内部方法来修改 引用所“指向”的值,而对于+或++等操作都是把结果重新放进一个new对象里,所以在test方法中Integer会重新new一个对象来存放结果 而对于StringBuffer来说,append()方法则是StringBuffer类的方法,专门用来修改内部值的,所以调用append时 引用不会变,但是,引用所指向的值变了,所以就达到了“传引用”的效果

共有 人打赏支持
粉丝 125
博文 53
码字总数 59920
×
那位先生
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: