java 值傳遞的例子
阿新 • • 發佈:2020-08-03
da家都知道java傳參是形參,即值傳遞。下面寫了幾個例子,加深一下了解。
1.基本型別 boolean/Boolean:
public static void main(String[] args) { //小寫的boolean,在方法中被修改為反值的情況 boolean a = false; checkBoolean(a); System.out.println(a); //大寫的Boolean被修改 Boolean a1 = new Boolean("false"); checkBoolean(a1); System.out.println(a1); checkBoolean1(a1); System.out.println(a1); checkBoolean2(a1); System.out.println(a1); }View Codepublic static void checkBoolean(boolean a){ a = !a; System.out.println("checkBoolean:"+ a); } public static void checkBoolean1(Boolean a){ a = true; System.out.println("checkBoolean:"+ a); } public static void checkBoolean2(Boolean a){ a = newBoolean("true"); System.out.println("checkBoolean:"+ a); }
輸出結果:
checkBoolean:true false checkBoolean:true false checkBoolean:true false checkBoolean:true falseView Code
現象:
方法裡修改值,並不影響方法外面的值 。
2.基本型別int/Integer
public static void main(String[] args) { //小寫的int,在方法中被修改的情況View Codeint a = 1; checkInt(a); System.out.println(a); //大寫的Integer被修改 Integer a1 = new Integer("1"); checkInt(a1); System.out.println(a1); checkInteger(a1); System.out.println(a1); checkInteger1(a1); System.out.println(a1); checkInteger2(a1); System.out.println(a1); } public static void checkInt(int a){ a = 2; System.out.println("checkInt:"+ a); } public static void checkInteger(Integer a){ a = 2; System.out.println("checkInteger:"+ a); } public static void checkInteger1(Integer a){ a = new Integer("2"); System.out.println("checkInteger1:"+ a); } public static void checkInteger2(Integer a){ a = new Integer("2526"); System.out.println("checkInteger2:"+ a); }
輸出結果:
checkInt:2 1 checkInt:2 1 checkInteger:2 1 checkInteger1:2 1 checkInteger2:2526 1View Code
現象:
方法裡修改值,並不影響方法外面的值 。
3.引用型別
public static void main(String[] args) { //小寫的int,在方法中被修改的情況 List<String> a = new ArrayList<>(); a.add("a"); a.add("b"); a.add("c"); //修改值 checkList(a); System.out.println(a); //指向新地址或者賦null checkList1(a); System.out.println(a); checkList2(a); System.out.println(a); checkList3(a); System.out.println(a); } public static void checkList(List a){ a.add("1"); a.add("2"); System.out.println("checkList:"+ a); } public static void checkList1(List a){ List<String> b = new ArrayList<>(); b.add("1"); b.add("2"); a = b; System.out.println("checkList1:"+ a); } public static void checkList2(List a){ a = null; System.out.println("checkList1:"+ a); } public static void checkList3(List a){ a.clear(); System.out.println("checkList1:"+ a); }View Code
輸出結果:
checkList:[a, b, c, 1, 2] [a, b, c, 1, 2] checkList1:[1, 2] [a, b, c, 1, 2] checkList1:null [a, b, c, 1, 2] checkList1:[] []View Code
現象:
修改值時,方法內修改的,方法外的物件也會改變;
指向新地址(new、null)的變化,不會影響方法外的值;