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

java是值传递还是引用传递

2017-12-07 17:33 381 查看
import java.util.ArrayList;
import java.util.List;

/**
* <p>
* <code>TtT</code>
* </p>
* Description:
*
* @author Mcchu
* @date 2017/12/7 15:50
*/
public class TtT {

/**
* 1. 参数传递本质就是一种 = 操作;
* 2. 对于基本数据类型变量,= 操作是完整地复制了变量的值。
* 3. 非基本数据类型变量,= 操作是复制了变量的引用
*
* 注意t1()方法中的参数名字不要被我写得和原来t()函数中定义的对象一致而被误导,它可以起任意名字
*
* 值传递是指将该值复制一份出来使用,比如a复制一份a1出来,a1做的操作不会影响到a,
* 引用传递是将该值的地址传递给方法,比如取sb1的地址值b,b指向sb1,可以通过b找到sb1并对sb1进行修改。这时候sb1的值就会改变。
*/
private void t(){
Integer a = 0;                                  //没有提供可以改变自身方法的引用类型
int b = 0;                                      //基本类型
String str = "string";
StringBuilder sb1 = new StringBuilder("iphone"); //提供了改变自身方法的引用类型
StringBuilder sb2 = new StringBuilder("iphone");
List<String> list = new ArrayList<>();

this.t1( a, b, str, sb1, sb2, list );
System.out.println(a);                          //没有被改变
System.out.println(b);                          //没有被改变
System.out.println(str);                        //没有被改变
System.out.println(sb1.toString());             //改变
System.out.println(sb2.toString());             //没有被改变
System.out.println(list.size());                //改变
}

private void t1( Integer a,
int b,
String str,
StringBuilder sb1,
StringBuilder sb2,
List<String> list){
a = 2;                                  //引用类型,复制引用,a放弃了原有引用
b = 3;                                  //基本类型,复制原值,此时b已不再是当初的b了
str = "hello world";                    //引用类型,复制引用,str放弃了原有引用

sb1.append("4");                        //引用类型,执行了可以改变自身的方法
sb2 = new StringBuilder("4");           //引用类型,复制引用,sb2放弃了原有引用,并且指向了新的对象实例

list.add("123");                        //引用类型,执行了可以改变自身的方法
}

public static void main(String[] args) {
TtT tt = new TtT();
tt.t();
}
}






参考:知乎
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java