黑马程序员技术交流社区

标题: 求解求解啊???????? [打印本页]

作者: Amor~    时间: 2016-4-21 21:37
标题: 求解求解啊????????
String s1 = “abc”;
   String s2 = new String(“abc”);
   System.out.println(s1==s2);
   String s3 = “你好吗”;
   String s4 =”你”;
   String s5 =”好吗”;
   System.out.println(s3==(s4+s5))  
作者: 牛凌霄    时间: 2016-4-21 21:43
结果是倆false
作者: 淡然无味    时间: 2016-4-21 22:47
false  因为new String(“abc”)中存放的是字符串常量abc的副本,实际上s2指向的是一个在堆内存中对象的地址,所以这里s1==s2返回的是false;false 这里虽然是+串起来了,但是这里s4、s5都是变量,底层是调用StringBuffer的append方法来实现的最后返回的结果需要调用toSting方法才能赋值给String类,但是调用toSting方法也意味着在堆中创建了一个新的对象,所以地址肯定不同,为false
作者: 兵蜂    时间: 2016-4-21 23:06
同意楼上,赞........................
作者: huangchenglin    时间: 2016-4-21 23:25
答案是两个falseJava 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。




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