博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Java值引用的问题
阅读量:6457 次
发布时间:2019-06-23

本文共 852 字,大约阅读时间需要 2 分钟。

hot3.png

好久没有写过博客了,主要是因为最近太忙太忙了,现在每天做的事情绝对是以前两倍以上。

今天遇到一个问题,就是传递Integer到一个方法里面,方法里面对值进行了改变,但是方法外面的没有生效。

public class Test {    public static void main(String[] args) {        Integer age = 1;        String name = "a";        changeMode(age, name);        System.out.println(age);        System.out.println(name);    }    public static void changeMode(Integer age, String name) {        age = 2222;        name = "bbbbb";    }}

如上这段代码输出的是

1a

虽然方法内部对Integer变量进行了改变但是,方法外部变量没有变。

其实原因很简单:

Java是值传递,什么是值传递呢?可以这么理解:对于基础变量传递的就是值本身,对于对象传递的是地址值。

那么为什么方法外部变量没有改变呢?

因为传递到方法内部的只是对象的地址,然后把地址的值赋给内部变量,在方法内部age=222,name="bbbbb"这两个语句只是重新给age,name变量赋新的地址值。也就是说Integer 以及String两个对象内部value是不会变的,本身他们也是final类型的。

同理对于Double,Short,Long等基础变量类也是同样的效果和原理。

那么有没有办法对这些基础变量类传递给方法的时候同时也改变外部对象?

当然有,虽然value是final类型的,但是可以通过反色的方式直接改变该地址的value值。

 

 

 

 

 

转载于:https://my.oschina.net/u/2250599/blog/756142

你可能感兴趣的文章
HDOJ5015 233 Matrix(矩阵乘法加速递推)
查看>>
移动铁通宽带上网设置教程
查看>>
java中判断字符串中是否有中文字符
查看>>
Python算法(含源代码下载)
查看>>
利用Windows自带的Certutil查看文件MD5
查看>>
通过原生js添加div和css
查看>>
简单的导出表格和将表格下载到桌面上。
查看>>
《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立
查看>>
递归查询上一级
查看>>
JAVA - 大数类详解
查看>>
查询指定名称的文件
查看>>
Python 嵌套列表解析
查看>>
[GXOI/GZOI2019]旧词——树链剖分+线段树
查看>>
android 补间动画的实现
查看>>
2017年广东省ACM省赛(GDCPC-2017)总结
查看>>
第十届蓝桥杯B组C++题目详解和题型总结
查看>>
简单理解函数回调——同步回调与异步回调
查看>>
Android 多个Activity 跳转及传参
查看>>
anroid 广播
查看>>
AJAX POST&跨域 解决方案 - CORS
查看>>