博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于JAVA中包装类的是什么类型传递这个问题的笔记
阅读量:5013 次
发布时间:2019-06-12

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

背景知识:

如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值。如果在函数中改变了副本的值不会改变原始的值.

如果参数类型是引用类型,那么传过来的就是这个参数的引用,这个引用存放的是参数的对象地址。如果在函数中没有改变这个参数的引用地址,而是改变了地址中的 值,那么在函数内的改变会影响到传入的参数。

如果在函数中改变了参数的引用地址,如new一个,那么函数中的局部变量就指向了一个新的对象地址,此时传入的参数还是指向原来的地址,所以不会改变参数的值(如下图)。

 

 

/** *  * @author ZHOUMI2  * 转自:http://blog.csdn.net/wuya814070935/article/details/49250773 */public class Test {    public static void test1(Integer num){        num = new Integer(5);    }    public static void test2(String str){        str.replace("1", "4");    }    public static void main(String[] args) {        Integer num = new Integer(1);        test1(num);        // 输出结果为1        System.out.println(num.intValue());        String str = new String("123");        test2(str);        // 输出结果为123        System.out.println(str);    }}

 

分析: 上述程序很容易让人误以为String类型和包装类型是值传递。

其实: String类型和包装类型都是对象类型,所以必然是引用传递。

      但是由于String类和包装类都被设定成不可变的,没有提供value对应的setter方法,而且很多都是final的,我们无法改变其内容,所以导致我们看起来好像是值传递。

转载于:https://www.cnblogs.com/xujanus/p/7194410.html

你可能感兴趣的文章
WCF:如何将net.tcp协议寄宿到IIS
查看>>
WebAPI HelpPage支持area
查看>>
Path元素
查看>>
php_soap扩展应用
查看>>
第二百三十一节,Bootstrap 介绍
查看>>
vi/vim 三种模式的操作
查看>>
JAVA面向对象三大特性总结
查看>>
guid
查看>>
Python中出现“TabError: inconsistent use of tabs and spaces in indentation”问题的解决
查看>>
ajax请求
查看>>
js学习总结----DOM增删改和应用
查看>>
希尔伯特矩阵(Hilbert matrix)
查看>>
(20)sopel算法
查看>>
学习总结 javascript 闭包
查看>>
实验吧一个小坑注入
查看>>
【 D3.js 高级系列 — 8.0 】 打标
查看>>
Mac必备软件推荐
查看>>
Android Gson深入分析
查看>>
display:flow-root
查看>>
判读字符串是否为空的全局宏-分享
查看>>