网上看了很多关于java中是值传递还是引用传递,
看了这么多,总结下来都是值传递。
无论是基本类型,还是引用类型,往方法里面传的都是他们值的副本。
基本类型以int类型为例:
a,b的结果未变。
接下来是引用类型:
public class TestByVal {
public static void main(String[] args) {
RefByVal a=new RefByVal("a1");
RefByVal b=new RefByVal("b1");
System.out.println("没进方法前");
System.out.println("a="+a.getVal());
System.out.println("b="+b.getVal());
change(a,b);
System.out.println("方法出来后");
System.out.println("a="+a.getVal());
System.out.println("b="+b.getVal());
}
public static void change(RefByVal x,RefByVal y){
System.out.println("正在方法中,类属性没变前");
System.out.println(x.getVal());
System.out.println(y.getVal());
x.setVal("a2");
y.setVal("b2");
System.out.println("传入的引用值相互转换下-");
RefByVal temp=x;
x=y;
y=temp;
System.out.println("传入的引用值转完了——");
System.out.println("正在方法中,类属性变了后");
System.out.println(x.getVal());
System.out.println(y.getVal());
}
}
class RefByVal{
private String val;
public RefByVal(){};
public void setVal(String val) {
this.val = val;
}
public RefByVal(String v){
this.val=v;
}
public String getVal() {
return val;
}
}
结果如下:
方法出来后
a=a2
b=b2,
如果,引用类型传递的是引用的话,
方法出来后,应该为
a=b2;
b=a2;
所以说,引用类型的传递也是值传递
但是对对象的属性进行操作的话,因为对象的属性是属于对象本身,所以这样的操作会改变本身的值。