今日看一练习题,想运行一下验证个结果
原题
- 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.
- i=i++;
- int j=++i;
这2行同时出现 编译可以通过,
3.
- i=i++;
- int j=++i + ++i;
这2行同时出现 编译不通过,
根据
Conversion to Dalvik format failed with error 2
这句话的提示意思,猜想是
编译成 Dalvik 虚拟机的 字节码文件格式出错了!
以前看资料知道 Dalvik 是自己的字节码格式,没想到 这种在JAVA上 常见的代码
却给 Dalvik 判了出错!
看来 Dalvik要走的路还很长啊!
其他 ++X, X++之类的我就不实验了!
反正 一般我们写程序的时候 不要用太多,复杂 的 ++连用 就OK啦!
还是写清楚 简单些的好!
本文转自 kome2000 51CTO博客,原文链接:http://blog.51cto.com/kome2000/578689