
uj5u.com熱心網友回復:
你看下ArrayList ToString()的原始碼,是不是重寫了ToString()uj5u.com熱心網友回復:
ArrayList 后面是string 型別的啊。輸出不就是string 型別的嗎....uj5u.com熱心網友回復:
/**
* Returns a string representation of this collection. The string
* representation consists of a list of the collection's elements in the
* order they are returned by its iterator, enclosed in square brackets
* (<tt>"[]"</tt>). Adjacent elements are separated by the characters
* <tt>", "</tt> (comma and space). Elements are converted to strings as
* by {@link String#valueOf(Object)}.
*
* @return a string representation of this collection
*/
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(' ');
}
}
uj5u.com熱心網友回復:
為什么字串轉字符陣列,直接輸出也是toString,字串轉位元組陣列就是記憶體地址……,這幾個搞得我好亂……uj5u.com熱心網友回復:
能直接輸出的就是這個類重寫了toString方法,列印出來的是地址就是這個類么有重寫toString方法,uj5u.com熱心網友回復:
列印物件就是呼叫物件本身tostring方法,默認tostring方式是輸出地址。某些類重寫tostring方法用來輸出內容。Arraylist就是重寫了tostring方法,所以輸出的是Arraylist的內容
uj5u.com熱心網友回復:
1、對于這段代碼:
System.out.println(list);
想看他是怎么輸出的,點擊println看它的原始碼:
public void print(Object obj) {
write(String.valueOf(obj));
}發現是按String.valueOf(obj)輸出的,繼續點進去:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}發現sout是按物件的toString方法輸出的,那再去看ArrayList的toString是怎么重寫的就好了。
2、ArrayList的toString方法原始碼:
①找到ArrayList發現它自身沒有重寫toString方法,而是用的父類AbstractList的父類AbstractCollection的方法
②原始碼如下:
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(' ');
}
}
uj5u.com熱心網友回復:
看你在4#這么說:“為什么字串轉字符陣列,直接輸出也是toString,字串轉位元組陣列就是記憶體地址……,這幾個搞得我好亂……”你怎么轉的,可以把代碼粘出來看下。
uj5u.com熱心網友回復:
我感覺他想說的應該 是直接列印陣列 輸出的為什么是記憶體地址你要直接列印陣列的話直接用Arrays.toString(arr)這個方法
uj5u.com熱心網友回復:
重寫tostring了唄uj5u.com熱心網友回復:
因為 String 型別重寫了 toString 方法,所以列印出來的時候是字符,而不是一個地址uj5u.com熱心網友回復:
ArrayList繼承了AbstractList , AbstractList類里重寫了toString()方法,所以會列印值,不是地址值uj5u.com熱心網友回復:
上面說錯了 不是ArrayList重新了toString方法 ArrayList繼承了AbstractList,AbstractList又繼承了AbstractCollection 是AbstractCollection抽象類重寫了toString方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/236163.html
標籤:Java SE
上一篇:求助QueryResult物件如何決議為json物件放回給前端
下一篇:高低或低高列印
