请大家帮忙解释一下结果为什么是这样? 很简单了,因为String定义的对象是不可改变的,所以无论你在fun()方法里怎么改变s,都不会有作用!不然java的安全性不就是天大的笑话了吗?而Vector是可以接受改变对象的,也就是说只要能够接受到它的聚丙,就可以任意改变它的对象! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 更简单点,可以把String看成一个简单的数据类型,虽然它是个类。 用String是不可变对象来解释这个问题好像不妥吧。如果按这个推理s="hehe";s1="haha";s=s1;岂不是得出了s还是hehe的结论。这里是向fun()里传参数的问题。我将Test2.java修改为如下:Test3.javaimport java.util.*;public class Test2{ public static void fun(Vector v){ Vector v1=new Vector(); v1.addElement("haha"); v1.addElement("hehe"); v=v1; } public static void main(String[] args) { Vector v=new Vector(); fun(v); System.out.println("v is:"); for(int i=0,n=v.size();i<n;i++){ System.out.println((String)v.elementAt(i)); } }}得到的结果是v的大小是0,和Test1的结果是一致的。Test2.java和Test3.java的写法有什么区别? 同意:因为String定义的对象是不可改变的对String的任何改变都相当于新建了一个String对象fun()函数里面的s变量指向这个新对象fun()函数外面的s变量还是指向原来的String对象 在你的第一个程序中public static void fun(String s){ s="haha";}s 只在 这个函数中有效 java初级语法与语义问题 Java Concurrent 一个生产者,多个消费者,线程如何设计? 想得到一个样式201111080001 这个程序说明了什么(新手问题) 关于+=和+的小问题,坐等高人。。 关于swing swt IE字体的绘制 画出贝塞尔曲线,怎么取x坐标对应的y坐标? 怎末运行不出来? 求各位大大帮忙,简单SQL语句 初学Java :关于 switch case 问题 ◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎ 如何指定JTable中的某列不能被选中?◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎ JTable太长超出边框暴难看,求救!(附上代码)
如果按这个推理
s="hehe";
s1="haha";
s=s1;
岂不是得出了s还是hehe的结论。这里是向fun()里传参数的问题。我将Test2.java修改为如下:
Test3.java
import java.util.*;
public class Test2{ public static void fun(Vector v){
Vector v1=new Vector();
v1.addElement("haha");
v1.addElement("hehe");
v=v1;
} public static void main(String[] args) {
Vector v=new Vector();
fun(v);
System.out.println("v is:");
for(int i=0,n=v.size();i<n;i++){
System.out.println((String)v.elementAt(i));
}
}
}
得到的结果是v的大小是0,和Test1的结果是一致的。
Test2.java和Test3.java的写法有什么区别?
对String的任何改变都相当于新建了一个String对象
fun()函数里面的s变量指向这个新对象
fun()函数外面的s变量还是指向原来的String对象
public static void fun(String s){
s="haha";
}
s 只在 这个函数中有效