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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yaolv7 中级黑马   /  2016-4-8 01:21  /  1164 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. String a = "aa";
  2.                 String b = "aa";
  3. System.out.println(a.equals(b));
  4.                 System.out.println(a==b);
  5.                
复制代码


不明白,明明一个比较内容,一个比较地址值

11 个回复

倒序浏览
因为String引用的字符串是final修饰的,a和b都指向同一字符串,所以都是为true
回复 使用道具 举报
变量a和变量b是指向同一个存储空间, 当是使用 " "直接赋值给多个变量时,这些变量是指向同一块区域的,算是一种优化
回复 使用道具 举报
  必须是true
回复 使用道具 举报
变量a和变量b是指向同一个存储空间, 当是使用 " "直接赋值给多个变量时,这些变量是指向同一块区域的,算是一种优化
回复 使用道具 举报
内存地址和指向的对象都是一个
回复 使用道具 举报
String a ="aa";  //字符串常量池开始是没有这个字符串,所以创建一个,然后变量指向这个"aa"的地址
String b ="aa";  //上面一个变量已经在字符串常量池里创建了这个"aa"了,所以不会再重新创建,直接将b也指向这个"aa"
所以a和b在比较地址的时候,结果是为true!!

注意,String a = "aa";  和  String b = new String("aa"); 这两种创建方式是不一样的!!!!
String s = "abc";        //是在字符串常量池中创建一个"abc"对象
String s1 = new String("abc");        //这个是用new的方法在堆中创建一个String对象,它是在构造当中创建并接收了一个"abc"对象,总共创建两个对象。
回复 使用道具 举报
楼上利害,学习了
回复 使用道具 举报
String a = "aa";                                    //a中的"aa"首先传入常量池,记录为aa
String b = "aa";                                   //b进入常量池进行匹配,如果匹配成功则不需要新创建
System.out.println(a.equals(b));        //a与b的值相等,必然为正确System.out.println(a==b);                 //地址值为同一个常量池,所以为正确
---------------------------------------------------------------------------------------
###12.05那天有详细的老师解答
回复 使用道具 举报
7楼解释的很好!
回复 使用道具 举报
都是true,很正常
回复 使用道具 举报
「AτS」 发表于 2016-4-8 10:37
String a ="aa";  //字符串常量池开始是没有这个字符串,所以创建一个,然后变量指向这个"aa"的地址
String b ...

还有常量池这东西.......好吧,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马