- JAVA中的参数传递总结
先看两道笔试题:1 public class Test2 { 2 3 public static void main (String [] args) { 4 StringBuffer a = new StringBuffer ("A"); 5 StringBuffer b = new StringBuffer ("B"); 6 operate (a,b); 7 System.out.println(a+","+b); 8 } 9 10 static void operate(StringBuffer x, StringBuffer y){ 11 x.append(y); 12 y = x; 13 } 14 }
该题会输出什么?
1 public class Test2 { 2 3 public static void add3 (Integer i){ 4 int val=i.intValue(); 5 val += 3; 6 i = new Integer (val); 7 } 8 9 public static void main (String args [ ] ) { 10 Integer i = new Integer (0); 11 add3 (i); 12 System.out.println (i.intValue ( )); 13 } 14 }
这个又会输出什么?
答案是: 1:AB,B 2:0
首先我们应该明白JAVA中的参数传递全是以值传递的。是基本类型,就拷贝一个基本类型传进方法;是引用,就拷贝一个引用变量传进去方法,理解了这两点就能理解方法操作对象的相关问题了。最好能画出引用指向对象的图出来,就能完全理解了。第1题,调用operate方法时,传入了两个引用a,b的拷贝x,y,这两个x,y都指向原a,b引用所指向的对象。x.append(y)对它指向的对象(即a指向的对象)进行了操作。而x=y,只是两个拷贝变量在赋值,并没有影响到原b所指向的对象。所以b所指向的对象仍然为B。
第2题,i=new Integer(val) 这里等于重新把i的引用指向别的对象了,所以原有对象的数没改,而原来的i仍然是指向对象new Integer(0)的。
把握住了JAVA都是传值并且传的都是拷贝的话,类似的题大家都能迎刃而解了。
原文地址:https://www.cnblogs.com/king-brook/p/9922272.html
时间: 2024-11-10 16:48:03