本人开发中遇到一个百思不得其解的问题。
两个Activity:a,b.
在a里面使用Bundle放入要传入的数据,这里假设putString(“abc”,"def")。(putInt等其他数据也是同样的运行结果!?)然后启动b。
在b里面解开Bundle传入的数据。
然后奇怪的事情发生了。
Intent intent=this.getIntent();
Bundle b=intent.getExtras();
String s=b.getString("abc");//其他的数据类型我试过,运行结果一样!???
问题的爆发点:
if(s=="def"){        //if(b.getString("abc")=="def")运行结果一样  
   根本就不会执行!!!!
}但是改成
if(s!="def")就会执行!!!!!!
这是为什么?
我明明放进去的数据是"def"(或者是putInt("abc",123)回来照样!=123才会执行!!!???)最气人的就是我用界面的setText()来看看到底b.getString("abc")解出来的是什么。
结果明白无误的显示:"def"  引号是我在这里加的。显示的时候当然是def了。大家有遇到的吗?

解决方案 »

  1.   

    字符串相等不能用等号,用这个 "def".equals(s)
      

  2.   

    ls正解,字符串内容之间比较用equals()函数,==是比较两个字符串的地址
      

  3.   

    这是java中一个对象池的概念问题
      

  4.   

    楼主哦  自我反省去吧!  字符串的比较必须 equals函数啊 怎么能用== 呢 
      

  5.   

    多谢大家的回复。(那个缺家教的除外。)看来是我把java的String想的和C#,Delphi,C++STL,BASIC用法一样方便了。Java不是我的母语。所以这里让大家见笑了。
    不过我在我的贴子里说了。我放进int,double也是一样的问题。
    为了让问题简单一点这里只说int
    int是原始类型。可是一样会有这个问题
    Activity1里面:putInt("a",123);
    Activity2里面:
    if(b.getInt("a")==123){
       没有执行
    }反倒是
    if(b.getInt("a")!=123){
        执行了!
    }int不应该有String那样的问题啊?
      

  6.   

    那你就用Log.v把b.getInt("a")返回值打出来看看
      

  7.   

    LZ似乎立马挽回面子。(包括反击某些人。)可惜经我测试,int没有String那样的问题!
    程序:
    Bundle b = myIntent.getExtras();
    int n = b.getInt("key");
    if(b.getInt("key") == 123){ 
        System.out.println("a --- " + n);    
    }
    else
        System.out.println("b --- " + n);
    结果:
    12-18 16:22:07.731: I/System.out(278): a --- 123
      

  8.   

    回复LS:
        我对Java就是一个因为Android而开始使用的门外汉。我还真没有想什么面子的问题。我确实是不明白而到这里来虚心求教的。但是某人实在是缺乏一个人最起码的教养。出口成脏实在是不应该。
        关于int我这里确实是有这个奇怪的现象。
        对了,一直忘了说了:我的模拟器设定的是版本1.6
        出问题也是在模拟器里。真机没有试过。
        
      

  9.   


    Activity1里面:putInt("a",123);
    Activity2里面:
    if(b.getInt("a")==123){
       没有执行
    }
    if(b.getInt("a")==123){ 请你把这一句的 双引号 去掉 谢谢
      

  10.   

    建议先学调试,再学发帖!
    此类问题,被骂也是正常的!要是放到stockflow,估计被骂得更惨