首页 > 编程语言 > 详细

java参数传递的探索(一)

时间:2019-05-19 12:14:58      阅读:97      评论:0      收藏:0      [点我收藏+]

前阵子手上有一个需求涉及到java传值的问题,我当时是想将一个定义好的String类型的变量作为参数传进一个方法中的,在方法中修改其值,接着在出方法以后做一个判断,判断这个值是否变化,有了变化就做一下操作,代码大概是这样的:

String version = "ABC";
hasOrderDetail(version); 
if(version.contains("XX")){   
        .....
}

public void hasOrderDetail(String value){
    value = "XXABC";     
}

很快我就发现问题了,hasOrderDetail这个方法并没有修改String的值,这是为什么呢?

一:搞清楚引用类型

技术分享图片

因为version是引用类型,所以它保存的是实际字符串的地址。

 

二:搞清楚赋值运算符(=)的作用

version = "java";

技术分享图片

对于引用类型,赋值运算符会改变其中保存的地址,地址值由原来的0x12变成了0x13,但是原地址中的值并不会改变,换句话说就是0x12中的值还是"hello"。

 

三:调用方法时发生了什么?

参数传递基本上就是赋值操作

技术分享图片

 

 

上图可以看到当进行参数传递的时候,相当于是将version中的地址值赋值给参数value,所以value此时指向的是0x12。 在函数中对value操作以后,value中的地址值就改变了

技术分享图片

不难发现,最后只是value的值改变了,version的值并没有变化。

 

总结:

1.引用类型保存的是地址,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变。

2.参数传递基本上就是赋值操作。

java参数传递的探索(一)

原文:https://www.cnblogs.com/nianyuyu/p/10888637.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!