A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

   首先第一个代码如下:
  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。把引号写后面也是一样的。
哪个大侠能帮我解决下。谢谢了。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览
System.out.println("====>"+a==b);
这句话的执行顺序可以看成是   String str = "====>"+a; 即str ="====>abc";然后再执行str==b,所以结果是fals
这是因为“+”优先级比“==”优先级要高
所以应该改成这样System.out.println("====>"+(a==b));

评分

参与人数 1技术分 +1 收起 理由
scott0610 + 1 很不错

查看全部评分

回复 使用道具 举报
楼上正解。。。{:soso_e179:}
回复 使用道具 举报
  使用==来判断两个变量是否相等时,如果两个变量时基本数据类型,且都是数值型的,只要两个数值相等,==就返回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));  改变运算顺序

评分

参与人数 1技术分 +1 收起 理由
scott0610 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢大家了,现在我知道了。
回复 使用道具 举报
今天刚开了比老师的视频,还特别强调了这个知识点。
回复 使用道具 举报
学习喽!{:soso_e113:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马