日期:2014-05-20  浏览次数:20753 次

这道String 数组题目究竟怎么解释答案啊……
public class zuoye6 {
public static void main(String []args){
String []s={"1","2"};
mb(s);
System.out.println(s[0]+s[1]);
}
public static void mb(String s[]){
if(s.length<2){
return;
}
String t=s[0];
s[0]=s[1];
s[1]=t;
}
}
这道题答案为21,怎么回事啊,怎么解释,看了一晚的值传递和引用传递,解释不了啊!跟这个有什么区别啊
public class zuoye6 {
 public static void mb(String x,String y){
 x.concat(y);
 y=x;
 }
 public static void main(String[] args) {
 String a="A";
 String b="B";
 mb(a,b);
 System.out.println(a+"."+b);
 }
}


------解决方案--------------------
第一个static函数将s[0]与s[1]的指向字符串改变,效果就是互换,就是因为传入的数组
第二个里面的x.concat(y) 没有改变main函数当中a b的字符串引用指向对象的值,因为mb方法传入的是不可变类String的形式参数
------解决方案--------------------
1、String []s={"1","2"};
mb(s);


 s 是数组 ,所以 mb(s)穿进去的是s的指针 ,即s的存放的内存地址的首地址 ,而 mb()中对s做改变 ,也就是对s做改变 ;

2、String 是类类型 ,int byte short double float char boolean这些才是 基本类型 ,基本类型参数,传递进去的是 那个值的一份拷贝 , 而 类类型或数组 ,传递进去的是他们在内存中存放的内存地址指针,个人理解是这样,不知道对不对
------解决方案--------------------
第一个交换了两个引用x,y指向的对象;第二个应该是两个引用都指向一个对象,打印结果为AA 不知道对不
------解决方案--------------------
在java中,所有的传递都是值传递。作为对象来说,传递也是值,只不过这个值是一个地址,你将一个数组做为形参穿进去,然后做交换,这个时候由于数组里存的是地址,你将2个地址互换了,所以打印出来就是交换以后的值了
------解决方案--------------------
记住就行~~
String 类 是值传递~~源对象不可改变
数组 是引用传递~~会改变
------解决方案--------------------
探讨
记住就行~~
String 类 是值传递~~源对象不可改变
数组 是引用传递~~会改变

------解决方案--------------------
http://blog.csdn.net/jietoulangren/article/details/6918328