黑马程序员技术交流社区

标题: 接的问(论坛上问的问题,我发现了一个问题,相当的奇怪) [打印本页]

作者: 施家雄    时间: 2013-3-12 13:49
标题: 接的问(论坛上问的问题,我发现了一个问题,相当的奇怪)
   首先第一个代码如下:
  1. public class Demo02 {
  2.     public static void main(String[] args) {
  3.       
  4.         String a ="abc";
  5.         String b = "abc" ;
  6.         System.out.println("====>"+a==b);
  7.     }
  8. }
复制代码
第二个代码:
  1. public class Demo02 {
  2.     public static void main(String[] args) {
  3.       
  4.         String a ="abc";
  5.         String b = "abc" ;
  6.         System.out.println(a==b);
  7.     }
  8. }
复制代码
这两个的结果不一样,第二个为true。第一个为flase。而且输出语句:System.out.println("====>"+a==b);中的引号之间不论写什么结果都只是flase。把引号写后面也是一样的。
哪个大侠能帮我解决下。谢谢了。
作者: 张豪杰    时间: 2013-3-12 14:01
System.out.println("====>"+a==b);
这句话的执行顺序可以看成是   String str = "====>"+a; 即str ="====>abc";然后再执行str==b,所以结果是fals
这是因为“+”优先级比“==”优先级要高
所以应该改成这样System.out.println("====>"+(a==b));
作者: 曾钦    时间: 2013-3-12 14:03
楼上正解。。。{:soso_e179:}
作者: HM李超    时间: 2013-3-12 14:48
  使用==来判断两个变量是否相等时,如果两个变量时基本数据类型,且都是数值型的,只要两个数值相等,==就返回true;
  但对于两个引用类型的变量,必须它们指向同一个对象,==才返回true,示例代码中先创建了一个字符串变量a,并且在常量池中创建了abc这个对象,使a指向“abc”;
随后又创建字符串b,内存中已经存在abc,为了不浪费内存空间,b和a使用同一个字符串,所以a和b都指向同一个对象,结果返回true;
  对于第一道程序而言,System.out.println("====>"+a==b);因为“====>”也是一个字符串,由于“+“运算符优先级高于”==“,所以括号里的执行顺序是:
1,”====>“+abc ——>"====>abc";    2,"====>abc"==abc;3,返回false
  若要判断成true,改为System.out.println("====>"+(a==b));  改变运算顺序
作者: 施家雄    时间: 2013-3-12 18:51
谢谢大家了,现在我知道了。
作者: 丘凤光    时间: 2013-3-12 19:20
今天刚开了比老师的视频,还特别强调了这个知识点。
作者: 曹春贵    时间: 2013-3-12 19:34
学习喽!{:soso_e113:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2