JavaÖÐtoArrayµÄÓ÷¨Ì½¾¿
Ò»£® Incident
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
String[] tt =(String[]) list.toArray(new String[0]);
}
}
Õâ¶Î´úÂëÊÇûÎÊÌâµÄ£¬µ«ÎÒÃÇ¿´µ½String[] tt =(String[]) list.toArray(new String[0]) ÖеIJÎÊýºÜÆæ¹Ö£¬È»¶øÈ¥µôÕâ¸ö²ÎÊýnew String[0]È´ÔÚÔËÐÐʱ±¨´í¡£¡£¡£
¶þ£® Root Cause Analysis
¾Ñо¿·¢ÏÖtoArrayÓÐÁ½¸ö·½·¨£º
public Object[] toArray() {
Object[] result = new Object[size];
System.arraycopy(elementData, 0, result, 0, size);
return result;
}
²»´ø²ÎÊýµÄtoArray·½·¨£¬Êǹ¹ÔìµÄÒ»¸öObjectÊý×飬Ȼºó½øÐÐÊý¾Ý¿½±´£¬´Ëʱ½øÐÐתÐ;ͻá²úÉúClassCastException£¬ÕâÒ²¾ÍÊÇÉÏÊöÎÊÌâµÄroot causeÁË¡£
public Object[] toArray(Object a[]) {
if (a.length < size)
a = (Object[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size); System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
¶ø
Ïà¹ØÎĵµ£º
¹ØÓÚvolatile
ÎÒÃÇÖªµÀ£¬ÔÚJavaÖÐÉèÖñäÁ¿ÖµµÄ²Ù×÷£¬³ýÁËlongºÍdoubleÀàÐ͵ıäÁ¿Íâ¶¼ÊÇÔ×Ó²Ù×÷£¬Ò²¾ÍÊÇ˵£¬¶ÔÓÚ±äÁ¿ÖµµÄ¼òµ¥¶Áд²Ù×÷ûÓбØÒª½øÐÐͬ²½¡£
ÕâÔÚJVM 1.2֮ǰ£¬JavaµÄÄÚ´æÄ£ÐÍʵÏÖ×ÜÊÇ´ÓÖ÷´æ¶ÁÈ¡±äÁ¿£¬ÊDz»ÐèÒª½øÐÐÌØ±ðµÄ×¢ÒâµÄ¡£¶øËæ×ÅJVMµÄ³ÉÊìºÍÓÅ»¯£¬ÏÖÔÚÔÚ¶àÏ̻߳·¾³ÏÂ
volatile¹Ø¼ü×ÖµÄʹÓñäµÃ·Ç³£ÖØ ......
Collection:ÊÇ´æ·ÅÒ»×éµ¥ÖµµÄ×î´ó½Ó¿Ú£¬Ã¿¸öÖµ¶¼ÊÇÒ»¸ö¶ÔÏó£¬Ò»°ã²»»áÖ±½ÓʹÓÃCollection½Ó¿Ú
List£ºÊÇCollectionµÄ×Ó½Ó¿Ú£¬¶ÔCollection½øÐÐÁË´óÁ¿µÄÀ©³ä£¬ÀïÃæ´æ·ÅµÄÄÚÈÝ¿ÉÒÔÖØ¸´
Set£ºÊÇCollectionµÄ×ÓÀ࣬ûÓжÔCollection½øÐÐÀ©³ä£¬ÀïÃæ´æ·ÅµÄÄÚÈݲ»ÔÊÐíÖØ¸´
Map£ºÊÇ´æ·ÅÒ»¶ÔÖµµÄ×î´ó½Ó¿Ú£¬½Ó¿ÚÖÐÿ¸öÔªËØ¶¼ÊÇÒ»¶ ......
£¨1£© ¶ÔÏóÉúÃüÖÜÆÚµÄ¿ªÊ¼
¶ÔÏóÉúÃüÖÜÆÚ¿ªÊ¼Ê±£¬ÐèҪΪ¶ÔÏó·ÖÅäÄڴ棬²¢ÇÒ³õʼ»¯ËüµÄʵÀý±äÁ¿£»
¶ÔÏóÉúÃüÖÜÆÚ½áÊø
& ......
Javaѧϰ֮· --The Road Of Java Study
JAVAÊÇÒ»ÖÖÆ½Ì¨£¬Ò²ÊÇÒ»ÖÖ³ÌÐòÉè¼ÆÓïÑÔ£¬ÈçºÎѧºÃ³ÌÐòÉè¼Æ²»½ö½öÊÊÓÃÓÚJAVA£¬¶ÔC++µÈÆäËû³ÌÐòÉè¼ÆÓïÑÔÒ²Ò»Ñù¹ÜÓá£Óбà³Ì¸ßÊÖÈÏΪ£¬JAVAÒ²ºÃCÒ²ºÃûʲô·Ö±ð£¬ÄÃÀ´¾ÍÓá£ÎªÊ²Ã´ËûÃÇÄÜ´ïµ½Èç´Ë¾³½ç£¿ÎÒÏëÊÇÒòΪ±à³ÌÓïÑÔÖ®¼äÓй²Í¨Ö®´¦£¬Áì»áÁ˱à³ÌµÄ¾«Ë裬×ÔÈ»Äܹ»×öµ½Ò»Í¨°Ùͨ¡£Èçº ......
JVM±¾ÉíÌṩÁËÒ»×é¹ÜÀíµÄAPI£¬Í¨¹ý¸ÃAPI£¬ÎÒÃÇ¿ÉÒÔ»ñÈ¡µÃµ½JVMÄÚ²¿Ö÷ÒªÔËÐÐÐÅÏ¢£¬°üÀ¨ÄÚ´æ¸÷´úµÄÊý¾Ý¡¢JVMµ±Ç°ËùÓÐÏ̼߳°ÆäÕ»Ïà¹ØÐÅÏ¢µÈ
µÈ¡£¸÷ÖÖJDK×Ô´øµÄÆÊÎö¹¤¾ß£¬°üÀ¨jps¡¢jstack¡¢jinfo¡¢jstat¡¢jmap¡¢jconsoleµÈ£¬¶¼ÊÇ»ùÓÚ´ËAPI¿ª·¢µÄ¡£±¾Æª¶ÔÕⲿ
·ÖÄÚÈݽøÐÐÒ»¸öÏêϸµÄ˵ ......