我用简单的代码试过,将str1和str2都设为张三,但是既能执行循环里面,也能执行else语句

解决方案 »

  1.   

    你输出的str1确定是“张三”吗?是以log的形式输出的吗?
      

  2.   

    字符串用equals试试看吧, 如果类型相同的话
      

  3.   

    ==号比较的内存地址是否相等,equals是比较两个内存中的内容相等
    str1和str2是两个不同的内存地址用‘==’肯定是不相等的;你吧str2=‘张三’改为str2=str1;
    或者用equals代替‘==’号
      

  4.   

    字符比较用equals , java的基本功啊
      

  5.   

    equals吧 JAVA代码里面用的比较多
      

  6.   

    把JAVA基础看一下吧。
    JAVA中符串比较是这样的:str2.equals(str1) ,返回真或假。
      

  7.   

    因为String是个类,不是常量。每个类有自己的Hash码,它所驻的内存地址是不一样的,所以不能用“==”。
      

  8.   

    J2SE不过关了吧
    "=="一般是比较内存地址是否相同,
    equals比的是文本内容是否相同
    比如:
    String str = "123";
    String s1 = str;
    String s2 = new String("123");此时str == s2 , 返回为false;
    str == s1,返回为true;
    而str.equals(s2); 返回为true
      

  9.   

    String 是引用类型的,判断引用类型的相等只能用equals,
      

  10.   

    如果这样写,String str1="aaaa";String str2="aaaa"if(str1==str2) 比较结果为true
      

  11.   

    如果这样写,String str1="aaaa";String str2="aaaa"if(str1==str2) 比较结果为true
      

  12.   


    首先String str1="aaaa"; 
    此时虚拟机会创建一个变量str1,并且查找有没有已经存在的常量"aaaa",如果有str1就引用此常量,如果没有则创建一个"aaaa"常量,然后让str1去引用。由于此前没有创建过"aaaa",所以此时创建"aaaa"。
    String str2="aaaa";
    按照上面的思路,虚拟机不会再创建"aaaa",而只创建str2,然后让str2直接费用str1正在引用的"aaaa",
    所以,str1和str2都同时引用的一个存储地址,所以这时可以直接用“==”去判断且为真,但有且只有这种情况才成立。所以平时做字符串字符判断时不要用“==”。
      

  13.   

    再给你说一个例子:String str1="aaaa";
    String str2=new Sting("aaaa");此时的str1==str2会返回false。因为str2是引用的一个新的String对象new String("aaaa"),而不是去引用"aaaa"。
      

  14.   

    既然Android是基于JDK的,那么你就必须遵循JAVA规范以及了解JAVA虚拟机内存分配。
    否则你的程序是不可能在JDK环境下运行成功的。
      

  15.   


    如果这样写,String str1="aaaa";String str2="aaaa"if(str1==str2) 比较结果为true这个是肯定的,这个涉及地址池概念,
    str1="aaa";
    和str2="aaa"
    实际上有个地址池,里面有"aaa"的地址,
    然后你赋值给str1和str2时都先会进入池去看看是否有这个内容
    如果有则赋予值,没有再new
    所以str1="aaa" 和str2="aaa";
    其地址相同。