public   class   Hello   { public   static   void   main(String[]   args)   { String s1="hello";
String s2="hello";
System.out.println("print s1==s2: "+s1==s2);
System.out.println("print (s1==s2): "+(s1==s2));
                  }       
} 结果却是:false        //第一个输出竟然没有"print s1==s2:"中的内容
         print (s1==s2): true        //第二个结果却无故变了个样!望高手解答~~~~在线等!!

解决方案 »

  1.   

    测试的是跟楼主一样的期待高人ing~~~~~
      

  2.   

    这是什么bug呀,第一句先运算的“+”,再进行“==”判断,所以是false。
    System.out.println("print   s1==s2:   "+s1==s2); 
    改成:
    System.out.println("print   s1==s2:   " + (s1 == s2));
      

  3.   

    第一句System.out.println("print s1==s2:"+s1==s2);
    先运算的“+”,再进行“==”判断,所以是false。 
    第二句System.out.println("print s1==s2:"+(s1==s2)); 
    先判断的“s1==s2”,原因是有括号,再进行“+”运算,所以是true。
    这属于运算优先级问题!在写程序时一定要注意运算优先级!
      

  4.   

    System.out.println("print   s1==s2:   "+s1==s2); 
    ==
    System.out.println( ("print   s1==s2:   "+s1)  ==  s2); 
      

  5.   

    出现这个问题的原因在于对java里面的操作符的运算顺序没有搞清楚
    以后编程的时候,严格按照运算符的顺序,就可以避免了
      

  6.   

    不就是运算符优先级问题嘛怎么就成了bug。
      

  7.   

    学java一定要把概念和本质搞清楚,出现bug最好自己先仔细思考一下,编译器是不会骗人的
      

  8.   

    System.out.println("print   s1==s2:   "+s1==s2); 
    应该等价于:
        System.out.println( ("print   s1==s2:   "+s1) == s2);
      

  9.   

    第一个是运算符优先级的问题,大家都说了;
    第二个的话:"Hello"为常量字符串,s1与s2都指向它,s1==s2比的是存放地址,自然就一样了!
      

  10.   

    运算符优先级的问题:
    借用java编程思想里面的话:ulcer addicets really like c a lot