天天看點

Android的Dalvik虛拟機的一個小BUG

今日看一練習題,想運作一下驗證個結果

原題

int i=2;  

     i=i++;  

     int j=i++;  

     System.out.println(i+"===onTouchEvent==="+j); 

比較簡單,一看就是 i=3,j=2;

但在 Android的Dalvik虛拟機 上就不行

ECLIPSE沒有報錯

可是 編譯的時候提示

[2009-08-11 14:56:44 - android_Links] 

trouble writing output: shouldn't happen

[2009-08-11 14:56:44 - android_Links] Conversion to Dalvik format failed with error 2

這導緻程式無法運作!

在 百度上搜尋 Conversion to Dalvik format failed with error 出了好多結果

進去一看 就2,3種方法,

1.是clean...

2.是調整SDK,

(大家都是轉貼的比較多,原創的比較少啊!)

經過多次調整,

clean...     無效,

檢視SDK 模拟器 也都是1.5的,

(看來他們的錯誤和我的是不一樣了!不過這些轉貼,的也都隻是原封不動的轉了,估計也都沒驗證!)

搞來搞去,隻好把我的程式逐漸排查,

結果 果然是代碼有問題,

因為上邊的測試是我加到 我的遊戲 連連看 裡的

這個程式 以前運作都沒問題

不過,看 那道題的代碼也沒問題,

結果 還真是 這幾行代碼有問題了!

經研究 發現

1.

i=i++;  

int j=i++;  

這2行同時出現 編譯不通過,

2.

int j=++i; 

這2行同時出現 編譯可以通過,

3.

int j=++i + ++i; 

根據

Conversion to Dalvik format failed with error 2

這句話的提示意思,猜想是

編譯成 Dalvik 虛拟機的 位元組碼檔案格式出錯了!

以前看資料知道 Dalvik 是自己的位元組碼格式,沒想到 這種在JAVA上 常見的代碼

卻給 Dalvik 判了出錯!

看來 Dalvik要走的路還很長啊!

其他 ++X, X++之類的我就不實驗了!

反正 一般我們寫程式的時候 不要用太多,複雜 的 ++連用 就OK啦!

還是寫清楚 簡單些的好!

本文轉自 kome2000 51CTO部落格,原文連結:http://blog.51cto.com/kome2000/578689

繼續閱讀