国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - JDK1.6集合框架bug 6260652解析

JDK1.6集合框架bug 6260652解析

2021-01-28 12:13aitangyong Java教程

這篇文章主要為大家解析了JDK1.6集合框架bug:c.toArray might (incorrectly) not return Object[] (see 6260652),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近在看JDK的源碼:CopyOnWriteArrayList.java和ArrayList.java,這2個(gè)類的構(gòu)造函數(shù),注釋中有一句話看不懂。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
  elementData = Arrays.copyOf(elementData, size, Object[].class);
}
 
public CopyOnWriteArrayList(Collection<? extends E> c) {
Object[] elements = c.toArray();
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elements.getClass() != Object[].class)
  elements = Arrays.copyOf(elements, elements.length, Object[].class);
setArray(elements);
}

上網(wǎng)查了一下資料,才知道see 6260652 這個(gè)編號代表JDK bug庫中的編號。可以去官網(wǎng)查看bug詳情
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6260652
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6515694
6260652 和6515694這2個(gè)bug,貌似是同一個(gè)問題。這個(gè)bug是什么意思呢?我們先來看看一些測試代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public static void test1()
{
  SubClass[] subArray = {new SubClass(), new SubClass()};
  System.out.println(subArray.getClass());
 
  // class [Lcollection.SubClass;
  BaseClass[] baseArray = subArray;
  System.out.println(baseArray.getClass());
 
  // java.lang.ArrayStoreException
  baseArray[0] = new BaseClass();
}
 
public static void test2()
{
  List<String> list = Arrays.asList("abc");
 
  // class java.util.Arrays$ArrayList
  System.out.println(list.getClass());
 
  // class [Ljava.lang.String;
  Object[] objArray = list.toArray();
  System.out.println(objArray.getClass());
 
  objArray[0] = new Object(); // cause ArrayStoreException
}
 
public static void test3()
{
  List<String> dataList = new ArrayList<String>();
  dataList.add("one");
  dataList.add("two");
 
  Object[] listToArray = dataList.toArray();
 
  // class [Ljava.lang.Object;返回的是Object數(shù)組
  System.out.println(listToArray.getClass());
  listToArray[0] = "";
  listToArray[0] = 123;
  listToArray[0] = new Object();
   
}

1、關(guān)于test1()

 SubClass 繼承自BaseClass,由于SubClass數(shù)組中每一個(gè)元素都是SubClass對象,所以BaseClass[] baseArray = subArray;這種強(qiáng)制類型轉(zhuǎn)換不會(huì)報(bào)錯(cuò)。這其實(shí)就是java對象的向上轉(zhuǎn)型,子類數(shù)組轉(zhuǎn)換成父類數(shù)組是允許的。但是由于數(shù)組中元素類型都是SubClass類型的,所以 baseArray[0] = new BaseClass();會(huì)報(bào)錯(cuò)java.lang.ArrayStoreException。這也就是說假如我們有1個(gè)Object[]數(shù)組,并不代表著我們可以將Object對象存進(jìn)去,這取決于數(shù)組中元素實(shí)際的類型。

2、關(guān)于test2()

List<String> list = Arrays.asList("abc");需要注意,可以知道返回的實(shí)際類型是java.util.Arrays$ArrayList,而不是ArrayList。我們調(diào)用

Object[] objArray = list.toArray();返回是String[]數(shù)組,所以我們不能將Object對象,放到objArray數(shù)組中。

3、關(guān)于test3()

ArrayList對象的toArray()返回就是Object[]數(shù)組,所以我們可以將任意對象存放到返回的Object[]數(shù)組中。

通過test2和test3可以看出,如果我們有1個(gè)List<String> stringList對象,當(dāng)我么調(diào)用Object[] objectArray = stringList.toArray();的時(shí)候,objectArray 并不一定能夠放置Object對象。這就是源碼中的注釋:c.toArray might (incorrectly) not return Object[] (see 6260652)。為了考慮這種情況,所以源碼中進(jìn)行了if判斷,來防止錯(cuò)誤的數(shù)組對象導(dǎo)致異常。Arrays.copyOf(elementData, size, Object[].class);這個(gè)方法就是用來創(chuàng)建1個(gè)Object[]數(shù)組,這樣數(shù)組中就可以存放任意對象了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://blog.csdn.net/aitangyong/article/details/30274749

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 激情一区 | 国产精品视频播放 | 欧美日韩精品 | 亚洲精品9999 | 久久精品国产99国产精品 | 久久久天堂国产精品 | 精品成人av一区二区在线播放 | 成人精品一区二区三区视频播放 | 最新中文字幕在线 | 国产精品美女久久久久久免费 | 成人黄色免费在线视频 | 日本中文字幕一区 | 在线免费观看h片 | 中文久久精品 | 欧美另类综合 | 国产精品精品 | 男女深夜视频 | 日本中文字幕网 | 久热精品在线视频 | 看亚洲a级一级毛片 | 日韩在线免费观看视频 | 毛片网页 | 国产精品久久久久久久久久久久久 | 91av免费在线观看 | yy6080久久伦理一区二区 | 色偷偷噜噜噜亚洲男人 | 日日夜夜天天 | 91中文字幕在线观看 | 久久久久久网站 | 日本中文字幕视频 | 亚洲欧美国产日韩综合 | 在线观看视频91 | 国产精品久久久久久久久久久久久久 | 成人免费视频在线观看 | 精品一区二区三区中文字幕老牛 | 久久精品国产一区二区三 | 国产精品视频免费观看 | 亚洲精品综合 | 三区在线 | 999久久久国产999久久久 | 亚洲国产激情 |