java 方法中的形参传值
来源:互联网 发布:java业余培训机构 编辑:程序博客网 时间:2024/06/17 05:11
今天看到一个String传值问题,才发现以前的认知都是错的,为防止以后忘记,写下来。
先来看一个问题:
public static void main(String[] args){ String a="abc"; String b="bcd"; change(a,b); System.out.print("a为:"+a+"\n"); System.out.print("b为:"+b);}public void change(String a,String b){ a=b; b=a+b;}
这个输出结果是什么呢?
结果是: a为:abc
b为:bcd
这事为什么呢?不是a和b经过change方法改变了值吗?
首先这里要弄清楚一个概念:String类型的值是不可变的,也就意味String类型在创建后这个对象就是不可变的。所以a和b的值变没变就看它引用的String对象变没变。而String类型在方法中作为参数时,和基本类型一样传递的是他的值,也就是在change方法中a和b只是接受到了实参a和b的值而不是它的引用,即change(a,b)就是change(“abc”,”bcd”);所以这个方法并没有改变原来的a和b的引用对象,他们引用还是之前的”abc”和”bcd”。所以a和b的输出结果都不回变。在这里就要重点说明一点,String类型在方法中传递的是值而不是引用。所以一般在方法中进行操作都不回影响原来的值。
要是StringBuffer呢?
public static void main(String[] args){ StringBuffer a=new StringBuffer("abc"); StringBuffer b=new StringBuffer("bcd"); change(a,b); System.out.print("a为:"+a+"\n"); System.out.print("b为:"+b);}public void change(StringBuffer x,StringBuffer y){ x=y; y=x.append(y);}
输出结果:a为:abc
b为:bcdbcd
由于除了String以外的引用类型对象在传递参数时传递的是引用(本质上还是值,就是a和b的引用值),也就是这里有四个引用,a,b,x,y。其中a,x引用的对象为”abc”,b,y引用的对象为”bcd”;执行”x=y”时,x引用的对象由”abc”变成了”bcd”,此时b,x,y都是引用同一个对象”bcd”;a还是引用”abc”对象。执行”y=x.append(y)”时:由于x和y引用的是”bcd”对象,所以执行完后对象”bcd”变成了”bcdbcd”,但x,y,b还是引用此对象,所以输出的b为:bcdbcd;而a为:abc。
综上所述,java方法参数传递中传递的都是值,但基本类型和String传递的就是基本类型的值,而引用类型传递的值是引用,所以在方法中要看引用变没变,所引用的对象变没变。
希望上述对各位有所帮助,在下菜鸟一枚,欢迎大牛指教。
- java 方法中的形参传值
- Java中的main方法
- JAVA中的方法
- java中的equals()方法
- java中的finalize()方法
- java中的构造方法
- java中的构造方法
- java中的方法重载
- java中的finalize()方法
- Java中的常用方法
- Java中的常用方法
- java中的构造方法
- java中的Main方法..
- java中的各种方法
- Java中的构造方法
- java中的native方法
- java中的clone()方法
- java中的native方法
- Objective
- Guava Cache 数据变化实现回调的监听器RemovalListener
- Java数值类型提升机制
- 感想一篇and博客开张
- DC -19 :树树树02(接DC
- java 方法中的形参传值
- 在java中 i++和++i有什么区别
- UVA 10870 Recurrences 矩阵连乘 快速幂取模
- 深究js(六)——浅谈语句(语句Ⅰ)
- COllection介绍和Collection排序
- linux基本命令及操作11(pxe)
- 基础复习01
- hdu2096 小明A+B(C语言)
- hdu2096 小明A+B(C语言)