黑马程序员技术交流社区
标题:
集合中的问题! 求助
[打印本页]
作者:
周洋
时间:
2012-3-15 16:57
标题:
集合中的问题! 求助
下面这个程序中,al和arr都是引用类型的,为什么一个输出结果是引用地址,一个输出结果是存的内容?
代码如下
package execisetest;
import java.util.*;
public class CollectionTest {
public static void main(String [] args){
ArrayList al=new ArrayList();
al.add("jacaa");
al.add("fsf");
al.add("fsfaf");
sop(al);
int [] arr=new int[]{2,2,3,6};
sop(arr);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
作者:
谢明
时间:
2012-3-15 17:31
本帖最后由 谢明 于 2012-3-15 18:09 编辑
System.out.println(xx);这句
他实际上是先调用xx.toString()。 然后输出这个值。
而默认的toString方法将会输出 类的名字+“@”+hash码
////////////////api原文
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
//////////////////////
还有 就是 ArrayList覆写了toString()
作者:
彭卫红
时间:
2012-3-15 17:33
提示:
作者被禁止或删除 内容自动屏蔽
作者:
罗闯
时间:
2012-3-15 17:36
al和arr引用所指向的内容是不同的。
这应该要从ArrayList的底层实现来说起,在ArrayList底层其实它维护的是一个数组。
public boolean add(E e) {
ensureCapacity(size + 1); // elementData为数组
elementData[size++] = e;
return true;
}这是底层add方法的实现
当调用add方法往集合中添加数据(其实是往一个长度为10的集合中添加,该集合能自动增长),所以arr引用指向的是[jacaa, fsf, fsfaf]这个地址,
而数组中arr的引用指向的是该数组的引用地址。
希望能帮到你
作者:
段浩亮
时间:
2012-3-15 19:56
打印的原理是这样的 System.out.println() 对应的流是PrintStream,用的是PrintStream中的println()方法 println()打印对象的的源码是:
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
用到了String的静态方法valueOf(Object obj) 源码是
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
所以打印对象实际上是先调用了对象的toString()方法
那么你打印al就是调用了al的toString()方法,ArrayList的toString()方法是这样描述的
“返回此 collection 的字符串表示形式。该字符串表示形式由 collection 元素的列表组成,这些元素按其迭代器返回的顺序排列,并用方括号 ("[]") 括起来。相邻元素由字符 ", "(逗号加空格)分隔。通过 String.valueOf(Object) 可以将元素转换成字符串。”因此打印的是里边的元素
作者:
段浩亮
时间:
2012-3-15 20:17
本帖最后由 段浩亮 于 2012-3-15 20:20 编辑
接上(打印数组应该是这样的 我也不太确定 仅供参考)
打印数组默认是 [数组类型@hash地址值
只有字符数组不是这样的 因为PrintStream中对字符数组定义了打印方法println(char[] ch)方法 打印的是字符串
作者:
周洋
时间:
2012-3-16 11:46
谢谢,明白了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2