java方法参数接收是值与引用的思考
Posted 爱我-中华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java方法参数接收是值与引用的思考相关的知识,希望对你有一定的参考价值。
结论:
1、基本类型作为参数传递时,是传递值的拷贝(不是值本身),无论你怎么改变这个拷贝,不会引起原值的改变的。
2、对象(String类型除外)作为参数传递时,是把对象在内存中的地址拷贝一份传给参数,即在该方法中修改该参数,会引起原值的变化。
校验如下:
public class HelloMethod {
public void p1(String s1, int i1, StringBuffer sb) {
i1 = 2;
s1 = "bcd";
sb.append("加上abc");
//思考??
sb = new StringBuffer("eee");
}
public static void main(String[] args) {
String s2 = "aaa";
int i2 = 1;
StringBuffer sb = new StringBuffer("abc");
HelloMethod helloMethod = new HelloMethod();
helloMethod.p1(s2, i2, sb);
System.out.println(String.format("s2 = %s ,i1 = %s,sb = %s", s2, i2, sb));
}
}
打印:
s2 = aaa ,i1 = 1,sb = abc加上abc
分析:
1.当传递为String或int给方法时,在方法的内部做更改两个值得操作,其结果没有影响原始值,证明结论1。
2.当传递的是StringBuffer对象时,在方法内部追加的值,其结果反应到了原始值上,证明结论2。
思考:为什么在方法中对该方法的参数重新赋值不会影响原始值。
1.在面向对象的语言中(Java,javascript),方法和方法的参数都是对象。
2.对参数的重新赋值,就等于丢弃了传入方法的引用,而给方法的参数对象重新赋值。
以上是关于java方法参数接收是值与引用的思考的主要内容,如果未能解决你的问题,请参考以下文章