方法内给List 赋值问题
publicclassTest{publicstaticvoidmain(String[]args){Testtest=newTest();List<String>lis...
public class Test {
public static void main(String[] args){
Test test = new Test();
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
test.add(list);
for (String str : list) {
System.out.println(str);
}
}
private void add(List<String> list) {
List<String> list2 = new ArrayList<String>();
list2.add("c");
list2.add("d");
list2.add("e");
list = list2;
}
}
为什么结果不是 c d e ,而是a b
我记得是只有基本类型和String 才不会吃这套路啊。
public class Test {
public static void main(String[] args){
Test test = new Test();
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
test.add(list);
for (String str : list) {
System.out.println(str);
}
}
private void add(List<String> list) {
// List<String> list2 = new ArrayList<String>();
// list2.add("c");
// list2.add("d");
// list2.add("e");
// list = list2;
list.add("c");
list.add("d");
list.add("e");
}
}
这样就是引用传递了,我懂,但这跟我问的问题有什么区别呢? 展开
public static void main(String[] args){
Test test = new Test();
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
test.add(list);
for (String str : list) {
System.out.println(str);
}
}
private void add(List<String> list) {
List<String> list2 = new ArrayList<String>();
list2.add("c");
list2.add("d");
list2.add("e");
list = list2;
}
}
为什么结果不是 c d e ,而是a b
我记得是只有基本类型和String 才不会吃这套路啊。
public class Test {
public static void main(String[] args){
Test test = new Test();
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
test.add(list);
for (String str : list) {
System.out.println(str);
}
}
private void add(List<String> list) {
// List<String> list2 = new ArrayList<String>();
// list2.add("c");
// list2.add("d");
// list2.add("e");
// list = list2;
list.add("c");
list.add("d");
list.add("e");
}
}
这样就是引用传递了,我懂,但这跟我问的问题有什么区别呢? 展开
3个回答
展开全部
正因为你写的两个都是引用值的传递,才会出现你的“问题”
推荐答案的方法是最后改变了你list的引用 所以值会变是一定的
但是我知道你铅运虚的问题是区别 并不是要效果
参数list 再接受你传递的list时 是拷贝了引用的地址
也就是说 在调用函数时 你有了两个引用 都指向一个地址
那么你对参数里的引用的任何赋值 都没有改变参数外的引用(实参引用)
而你在方法里建立了第3个引用 list2 指向新的地址 并且有c d e三个值
如悄族果你最后没有返回list2的引用 即使你list = list2;形参list 将不会再被你访问到
相当于方法内的list(槐燃c d e)丢失
方法外的list(a b) 没有改变过
推荐答案的方法是最后改变了你list的引用 所以值会变是一定的
但是我知道你铅运虚的问题是区别 并不是要效果
参数list 再接受你传递的list时 是拷贝了引用的地址
也就是说 在调用函数时 你有了两个引用 都指向一个地址
那么你对参数里的引用的任何赋值 都没有改变参数外的引用(实参引用)
而你在方法里建立了第3个引用 list2 指向新的地址 并且有c d e三个值
如悄族果你最后没有返回list2的引用 即使你list = list2;形参list 将不会再被你访问到
相当于方法内的list(槐燃c d e)丢失
方法外的list(a b) 没有改变过
展开全部
你还是没有明白我说的意思,你的 private void add(List<String> list) 这个方法的返回值类型为void,也就是没有返回值,所以你的test.add(list);根本就没有意义,你的list中的对象没有改变,存放的衡带数据还是只有你在main方法中添加的a与b,请参考下我下面的带有返回值的方法,我的
private List add(List<String> list)方法把list2中对象赋给list后把list返回给了调用这个方法的对象,所以在main中的list对象弯拦销就改变了
test.add(list);
这个add()方法你只是把list传入,虽然你在add方法中把list2的值赋给了list,但是你没有返回list啊,所埋游以输出的还是保存在main方法list中的a,b
运行下我下面的代码就能够得到你需要的值了
public class Test3 {
public static void main(String[] args){
Test3 test = new Test3();
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list = test.add(list);
for (String str : list) {
System.out.println(str);
}
}
private List add(List<String> list) {
List<String> list2 = new ArrayList<String>();
list2.add("c");
list2.add("d");
list2.add("e");
list = list2;
return list;
}
}
private List add(List<String> list)方法把list2中对象赋给list后把list返回给了调用这个方法的对象,所以在main中的list对象弯拦销就改变了
test.add(list);
这个add()方法你只是把list传入,虽然你在add方法中把list2的值赋给了list,但是你没有返回list啊,所埋游以输出的还是保存在main方法list中的a,b
运行下我下面的代码就能够得到你需要的值了
public class Test3 {
public static void main(String[] args){
Test3 test = new Test3();
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list = test.add(list);
for (String str : list) {
System.out.println(str);
}
}
private List add(List<String> list) {
List<String> list2 = new ArrayList<String>();
list2.add("c");
list2.add("d");
list2.add("e");
list = list2;
return list;
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java里的参数传递都是值传递。 list 的作散销用范围在main函数友歼里。
而add方法里的list只在好掘冲本方法里有效。
而add方法里的list只在好掘冲本方法里有效。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询