一个简单的java问题 先后的赋值问题

疯狂的球球ww 2014-09-14 09:53:48
import java.util.*;

public class TestListAdd {
public static void main(String[] args) {
List list = new ArrayList();
List list1 = new ArrayList();
list.add(list1);
list1.add("a");
System.out.println(list);
int b=0;
int a=b;
b=8;
System.out.println(a);

}
}


得到的结果是:
[[a]]
0



求大神给解释 全部家当已奉上
...全文
345 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
一大三千 2014-09-15
  • 打赏
  • 举报
回复
引用 2 楼 shaowei213 的回复:
[quote=引用 1 楼 magi1201 的回复:] 将 System.out.println(list); 修改为 System.out.println(list1 + " " + list); 看的会清晰一些 [a] [[a]] list1 包含一个元素 a,打印结果为[a], list 包含一个元素list1,打印结果就是[[a]] 了。 list的父类AbstractCollection重写了toString方法,让list的元素打印出来为[ ] 包括的。

public String toString() {
        Iterator<E> it = iterator();
        if (! it.hasNext())
            return "[]";

        StringBuilder sb = new StringBuilder();
        sb.append('[');
        for (;;) {
            E e = it.next();
            sb.append(e == this ? "(this Collection)" : e);
            if (! it.hasNext())
                return sb.append(']').toString();
            sb.append(',').append(' ');
        }
    }
不好意思 是我问题没问清楚, 我意思是为什么不是打印的"[ ]" ,0 , 以一般的理解list1是后面才赋值的。 你的代码没怎么看懂, 是在list集合打印的时候,需要是遍历里面的所有元素么。[/quote] 4楼已经给出具体回答了,我再补充下。楼主的写法中,第8行是往集合里添加String对象,而第10~12行是对变量赋值,结果当然不是[ ] ,0 。
  • 打赏
  • 举报
回复
list.add(list1);
       list1.add("a");
其实,你创了建的ArrayList是完全不同的 list.add(list1); 实际是ArrayLIst<ArrayLIst> list = new ArrayList<ArrayList>(); list1.add("a"); 实际是 ArrayList<String> list1 = new ArrayList<String>();
dzq584462393 2014-09-15
  • 打赏
  • 举报
回复
引用 9 楼 dzq584462393 的回复:
List里面是Object数组实现的,里面有Object[]的引用

List list = new ArrayList();
List list1 = new ArrayList();
list.add(list1);
你把list1加入到list里面,说明是list里面的数组引用指向了list1的数组引用,当list1里面加入值了,list里面也就有值了

int b=0;
int a=b;
b=8;
你把a的值给b,a,b都等于0,然后你又让b指向8,a的指向是不变的,所以还是0

public class Student {
	public String name;
	public static void main(String[] args) {
		Student s1 = new Student();
		s1.name = "s1";
		Student s2 = s1;
		s2.name = "s2";
		System.out.println(s1.name);
	}
}
这个你明白吗?
我擦,第一个写错了
疯狂的球球ww 2014-09-15
  • 打赏
  • 举报
回复
引用 8 楼 crazy_i 的回复:
List 是引用类型,引用类型的赋值只是地址的赋值,这点跟基本类型不一样。
恩 多谢 正解 有点迷糊了。
dzq584462393 2014-09-15
  • 打赏
  • 举报
回复
List里面是Object数组实现的,里面有Object[]的引用

List list = new ArrayList();
List list1 = new ArrayList();
list.add(list1);
你把list1加入到list里面,说明是list里面的数组引用指向了list1的数组引用,当list1里面加入值了,list里面也就有值了

int b=0;
int a=b;
b=8;
你把a的值给b,a,b都等于0,然后你又让b指向8,a的指向是不变的,所以还是0

public class Student {
	public String name;
	public static void main(String[] args) {
		Student s1 = new Student();
		s1.name = "s1";
		Student s2 = s1;
		s2.name = "s2";
		System.out.println(s1.name);
	}
}
这个你明白吗?
南乔不休 2014-09-15
  • 打赏
  • 举报
回复
List 是引用类型,引用类型的赋值只是地址的赋值,这点跟基本类型不一样。
iiiiduoaiiiii 2014-09-14
  • 打赏
  • 举报
回复
4楼的说法,让我也清晰许多。
姜小白- 2014-09-14
  • 打赏
  • 举报
回复
List list = new ArrayList(); List list1 = new ArrayList(); list.add(list1); // list 中添加了元素list1,list中的第一个元素指向了list1的内存地址 list1.add("a"); // 给list1 的内存地址中添加了一个元素a,下面再打印的时候,自然就打印出list1 中的a 了 int b=0; int a=b; // 将b的值赋给a,此时a 的值为0 b=8; // 再改变b的值,不会影响到a的值
代码与酒 2014-09-14
  • 打赏
  • 举报
回复
你创建了两个集合,然后给list1添加了一个元素“a”,又把list1的全部元素添加到了list里面,所以你输出list的时候当然会输出一个元素“a”呀。至于后面a等于0的问题,额。。。有什么疑问么?int 是值数据类型,先给a赋0,改变b的值并不会影响a的值,所以a仍然是0。我想楼主你纠结的是这两种数据类型的问题吧。
疯狂的球球ww 2014-09-14
  • 打赏
  • 举报
回复
引用 1 楼 magi1201 的回复:
将 System.out.println(list); 修改为 System.out.println(list1 + " " + list); 看的会清晰一些 [a] [[a]] list1 包含一个元素 a,打印结果为[a], list 包含一个元素list1,打印结果就是[[a]] 了。 list的父类AbstractCollection重写了toString方法,让list的元素打印出来为[ ] 包括的。

public String toString() {
        Iterator<E> it = iterator();
        if (! it.hasNext())
            return "[]";

        StringBuilder sb = new StringBuilder();
        sb.append('[');
        for (;;) {
            E e = it.next();
            sb.append(e == this ? "(this Collection)" : e);
            if (! it.hasNext())
                return sb.append(']').toString();
            sb.append(',').append(' ');
        }
    }
不好意思 是我问题没问清楚, 我意思是为什么不是打印的"[ ]" ,0 , 以一般的理解list1是后面才赋值的。 你的代码没怎么看懂, 是在list集合打印的时候,需要是遍历里面的所有元素么。
姜小白- 2014-09-14
  • 打赏
  • 举报
回复
将 System.out.println(list); 修改为 System.out.println(list1 + " " + list); 看的会清晰一些 [a] [[a]] list1 包含一个元素 a,打印结果为[a], list 包含一个元素list1,打印结果就是[[a]] 了。 list的父类AbstractCollection重写了toString方法,让list的元素打印出来为[ ] 包括的。

public String toString() {
        Iterator<E> it = iterator();
        if (! it.hasNext())
            return "[]";

        StringBuilder sb = new StringBuilder();
        sb.append('[');
        for (;;) {
            E e = it.next();
            sb.append(e == this ? "(this Collection)" : e);
            if (! it.hasNext())
                return sb.append(']').toString();
            sb.append(',').append(' ');
        }
    }

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧