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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 金_鑫 中级黑马   /  2012-7-26 17:31  /  1182 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 金_鑫 于 2012-7-28 13:51 编辑

java code String a = "ab";
String b
= "a" + "b";
System.out.println(a
==b);
true or false
  true

String a = "abc";
String b
="ab";
String c
=b+"c";
System.out.println(a
==c);
true or false

  

评分

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

查看全部评分

3 个回复

倒序浏览
java code String a = "ab";//在常量池里a引用指向ab字符
String b = "a" + "b";//发现字符a和b本身在常量池里就有,所以就不用再创建,所以直接b这个引用也指向这个字符串
System.out.println(a==b); //两个引用指向一个字符串,答案自然是true


String a = "abc";//常量池本身有一串这个字符串
String b="ab";//发现前面的字符串abc跟ab是不一样的,所以这是一个新的引用指向新的字符串
String c=b+"c";//但如果是c="ab"+"c"是true
System.out.println(a==c);
回复 使用道具 举报
  1.                 String a="abc";
  2.                 String b="ab";
  3.                 String c=b+"c";
  4.                 if(c==a){   
  5.                         System.out.println(true);
  6.                 }else{
  7.                         System.out.println(false);
  8.                 }
复制代码
输出的结果是false。
a虽然和c的输出结果都一样,但是两个abc所在的内存空间不一样。
也就是说,a和c指向的内存空间不在一个内存地址当中。
所以。==表达式判断的结果会是false。
如果代码是
  1.                 String a="abc";
  2.                 String b="ab";
  3.                 String c=b+"c";
  4.                 if(c.equals(a)){   
  5.                         System.out.println(true);
  6.                 }else{
  7.                         System.out.println(false);
  8.                 }
复制代码
那么,结果会是true。equals用于比较两个字符串是否相同。
这里有详细的说明和解释:http://bbs.itheima.com/thread-20534-1-1.html
回复 使用道具 举报
字符串是放在字符串常量池中的。一旦一个字符串形成后就是不能改变的。String a = "ab"; 创建了字符串"ab", String b = "a" + "b";先不创建,先找常量池中有没有这样的常量字符串.如果有,直接指向.否则.重新创建一个.创建b的时候常量池中已经有"ab"了,所以就直接用"ab",所以a==b是true.
String a = "abc";
String b="ab";
String c=b+"c";
常量池中有"abc" "ab" "c"  c=b+"c",因为b的存在,是一个新对象,然后加上"c"就又产生了一个新对象。所以c和a的地址值是不同的

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马