谈到传递,先说一下
形参:定义方法时写的参数
实参:调用方法时传递的具体参数
(参数传递本质上都是值传递)
之后说一下java中的
基本数据类型???????
整形 byte(8位 1字节 -128~127)short (16位 2字节 -32768~32767) int(32位 4字节-2^31-1~2^31) long(64位 8字节 -2^63-1~2^63 需要在后面加L或l)
浮点型 float (32位 4字节 1位符号位 8位指数 23位有效位数 需要加F或f后缀) double(64位 8字节 1位符号位 11位指数位 52位有效尾数) 浮点数不可以精确计数
字符型 char(16位 2字节)Unicode表示
布尔型 Boolean (true false)
引用数据类型
对象Object
数组Array
接口Interface
传递的是值的拷贝(将实参的内容copy一份给形参)
可以这么形容
传递的实质上是该类型所在的地址(将实参的地址值copy一份给形参)
可以这么形容
3.1 String(表现为值传递,即方法内的修改不影响方法外的值)
这里说明一下String类是final类内容不可修改,具体到底层实现就可以看出,实际上它的subString, concat ,repalce方法实际上是执行了
char data[] = {‘a‘, ‘b‘, ‘c‘};
String str = new String(data);
意思是新创建了一个String, 将新的地址值赋值给str‘(就是改变了形参指向的对象),实际上实参的内容没有变
3.2 Integer,Double等包装类(表现为值传递,即方法内的修改不影响方法外的值)
也可以理解为改变了形参指向的对象,修改的是新对象的值,实际上实参指向的对象内的值没有变
3.3StringBuffer和StringBuilder(表现为引用传递,方法内的修改会对方法外产生影响)
值可变,形参指向的就是具体的值,没有改变指向
(部分应用自https://www.cnblogs.com/boboooo/p/9066831.html)
(深入理解java中的String 对String问题比较透彻https://www.cnblogs.com/xiaoxi/p/6036701.html)
原文:https://www.cnblogs.com/LvHongsBlog/p/9932700.html