返回信息流补充:讨论的是执行顺序错乱的问题,不是结果正确与否的问题
楼主真的快哭了呢
————————————————————题记
直接上代码:
Android代码:
public class Test extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
get();
}
private String get(){
HashMap<String, String> map = new HashMap<String, String>();
map.put("a", "a");
map.put("b", "b");
int level[] = new int[3]; //line1
level[0] = (map.get("a") != null) ? 1 : 2; //line2
level[1] = (map.get("c") != null) ? 1 : 2; //line3
level[2] = (map.get("b") != null) ? 1 : 2; //line4
return ""; //line5
}
}
单步调试在line1处加断点,执行顺序line1->line2->line3->line2->line3->line4...(注:line3直接到line2,没有到line4)
楼主不死心换了个顺序像这样:
int level[] = new int[3]; //line1
level[1] = (map.get("c") != null) ? 1 : 2; //line2
level[0] = (map.get("a") != null) ? 1 : 2; //line3
level[2] = (map.get("b") != null) ? 1 : 2; //line4
return ""; //line5
此处把level[1]放到level[0]上面,依旧line1处加断点
执行顺序line1->line2->line5->line2->line3->line4->line5 。。。(楼主此时已疯[ema1])
但是楼主依旧不死心,新建了一个JAVA工程(不是Android工程),代码如下:
class SomeTest{
public static void main(String[] args){
get();
}
public static String get(){
HashMap<String, String> map = new HashMap<String, String>();
map.put("a", "a");
map.put("b", "b");
int level[] = new int[3];
level[0] = (map.get("a") != null) ? 1 : 2;
level[1] = (map.get("c") != null) ? 1 : 2;
level[2] = (map.get("b") != null) ? 1 : 2;
return "";
}
}
执行顺序正常,没有错误。
楼主分别看了下Android工程与JAVA工程所用的Java Compiler,JAVA勾选的是
Use compliance from execution environment 'JavaSE-1.7' on the 'Java Build Path'
Compiler compliance level 1.7
而Android工程勾选的是Use default compliance settings 1.6
楼主猜测是不是JDK编译器版本的问题
于是把JAVA工程也改为Use default compliance settings 1.6,但是,JAVA工程依旧顺利的执行。。。楼主再次疯掉。。。
马上振作起来,由于Android无法勾选
Use compliance from execution environment 'JavaSE-1.7' on the 'Java Build Path'
Compiler compliance level 1.7
于是我就改了Use default compliance settings 1.7,然后就报错了,然后就没脾气了...
求解。折腾一天楼主已疯 特来发帖[ema1]
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #13372同步于 2014/4/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
Android中HashMap出现的问题【楼主已疯】
kingkongman
2014/4/21镜像同步34 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
结果肯定是没问题的。 。但是顺序还是很奇怪啊。无法理解啊。楼主轻微强迫症。。真的快疯了[ema1] 你那边顺序会错乱么?
【 在 icyfox 的大作中提到: 】
: 不知道你为啥那么在乎顺序,但是看起来结果好像没啥问题啊。
: [upload=1][/upload]
如何知道顺序对不对?
【 在 kingkongman (kingkongman) 的大作中提到: 】
: 结果肯定是没问题的。 。但是顺序还是很奇怪啊。无法理解啊。楼主轻微强迫症。。真的快疯了[ema1] 你那边顺序会错乱么?
我做安卓没打断点的习惯,一般就是加log,意义一样吧
【 在 kingkongman (kingkongman) 的大作中提到: 】
: 加断点跑一下,逐句Step Over
很遗憾的说这样不能证明,执行顺序是这样的line3->line2->line3,你所标注的TAG 1的二次并没有执行。所以结果依旧是输出四个TAG
【 在 icyfox 的大作中提到: 】
: 这样可以证明顺序没问题么?
: [upload=1][/upload]
更具体的说line3->line2后直接跳过了Log.i("TAG 1",***) 继续执行line3。理论和实际还是有些偏差的
【 在 icyfox 的大作中提到: 】
: 我做安卓没打断点的习惯,一般就是加log,意义一样吧
:
这个代码的逻辑
凭什么会有line3 -> line2的可能性
【 在 kingkongman 的大作中提到: 】
: 很遗憾的说这样不能证明,执行顺序是这样的line3->line2->line3,你所标注的TAG 1的二次并没有执行。所以结果依旧是输出四个TAG