您的位置:首页 > 编程语言 > Java开发

理解Java中的引用传递和值传递

2017-05-31 13:45 190 查看
最近在复习java基础,看到这个知识点,总结下。

首先将变量分为两类:

基本类型变量,包括boolean、byte、char、short、int、long、float、double。

引用类型变量,包括类、接口、数组(基本类型数组和对象数组)。

3.如果传递的值是基本类型变量,就是属于值传递,a的值不会改变。相当于把a的值复制给i,然后i的值又为2,相当于把原来的值给覆盖了。但是a的值没有任何变化

public class Test1 {

public static void main(String[] args) {
// TODO Auto-generated method stub
int a=1;
exchange(a);
System.out.println(a);
}

private static void exchange(int i) {
// TODO Auto-generated method stub
i=2;
System.out.println(i);
}

}


4.如果传递的对象的话,就是引用传递,引用传递的话,就是将变量的内存地址传进去,这里的话就是str2同样也指向str的内存地址,所以str2改变的话,str的值也会改变,结果为ab

public class Test2 {
static StringBuffer str=new StringBuffer("a");
public static void main(String[] args) {
// TODO Auto-generated method stub
exchange(str);
System.out.println(str);
}
private static void exchange(StringBuffer str2) {
// TODO Auto-generated method stub
str2.append("b");
}

}


5.String, Integer, Double等immutable的类型特殊处理,可以理解为传值,最后的操作不会修改实参对象。str结果为a

public class Test3 {
static String str=new String("a");
public static void main(String[] args) {
// TODO Auto-generated method stub
exchange(str);
System.out.println(str);
}
private static void exchange(String str2) {
// TODO Auto-generated method stub
str2="b";
}

}


6.参考地址https://www.zhihu.com/question/31203609
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息