package com.xch.test02;
/**
* 值传递和引用传递的区别
* -值传递是将变量副本传到方法中,方法中改变变量,对原有变量不影响,对应深克隆
* -引用传递是将变量地址传到方法中,方法中改变变量即为改变原有变量,对应浅克隆
* -其中,String涉及常量池,改变的本质是新建变量,对原有变量不影响,属于值传递
*
* @author Chenghe Xu
* @date 2022/10/8 10:40
*/
public class ValueAddressTransmit {
public static void main(String[] args) {
// 值传递(传递的是内容)测试
int a=1;
valueChange(a);
System.out.println("原来的a="+a);
Integer aa = 11;
valueChange(aa);
System.out.println("原来的aa="+aa);
int aaa1 =1111;
valueChange(aaa1);
System.out.println("原来的aaa1="+aaa1);
System.out.println("================");
// 引用传递(传递的是地址)测试
MyObj myObj=new MyObj(1);
addressChange(myObj);
System.out.println("原来的myObj.aa="+myObj.aa);
StringBuilder sb=new StringBuilder("ab");
stringBuilderTest(sb);
System.out.println("原来的sb="+sb);
System.out.println("================");
// String字符串类底层final修饰不可变,改变时是新建一个对象到常量池进行地址引用
String str="ab";
stringTest(str);
System.out.println("原来的str="+str);
}
public static void valueChange(Integer a){
a++;
System.out.println("方法中的a="+a);
}
public static void addressChange(MyObj myObj){
myObj.aa++;
System.out.println("方法中的myObj.aa="+myObj.aa);
}
public static void stringBuilderTest(StringBuilder sb){
sb.append("cd");
System.out.println("方法中的sb="+sb);
}
public static void stringTest(String str){
str="cd";
System.out.println("方法中的str="+str);
}
}
class MyObj{
int aa;
public MyObj(int aa) {
this.aa = aa;
}
}
笔试题-值传递和引用传递
于 2023-08-31 18:00:41 首次发布