黑马程序员技术交流社区

标题: 迷惑??? [打印本页]

作者: 高廷平    时间: 2012-8-31 16:06
标题: 迷惑???
package mytest;
public class Demo_yest {
public static void main(String[] args) {
  String str1=new String("abc");
  String str2=new String("abc");
  System.out.println(str1+"和"+str2+"相等吗?:"+(str1==str2));
  //==比较的是内存地址
}
}
输出:abc和abc相等吗?:false
package mytest;
public class Demo_yest {
public static void main(String[] args) {
  String str1=new String("abc");
  String str2=new String("abc");
  System.out.println(str1+"和"+str2+"相等吗?:"+str1==str2);
  //==比较的是内存地址
}
}
输出:false

????????????
第二个程序的 “abc和abc相等吗?”   跑哪里去了呢?

作者: 周兴华    时间: 2012-8-31 16:15
本帖最后由 周兴华 于 2012-8-31 16:20 编辑

楼主请看红色字体注释部分

package mytest;
public class Demo_yest {
public static void main(String[] args) {
  String str1=new String("abc");  //在内存中开辟了一个空间存放new String("abc")对象,变量str1指向这个对象
String str2=new String("abc");  //在内存中又开辟了一个空间存放new String("abc")对象,变量str2指向这个对象
System.out.println(str1+"和"+str2+"相等吗?:"+(str1==str2));  //str1和str2指向的是两个不同的对象,所以这里返回的是false,(str1==str2)要括起来
  //==比较的是内存地址
}
}

作者: 袁艳超    时间: 2012-8-31 16:16
这是一个很低级的错误,+  是字符串连接符,你输出的是 (str1+"和"+str2+"相等吗?:"+str1)和 str2 是否相等, 那肯定是false啦
作者: 陈莹    时间: 2012-8-31 16:18
本帖最后由 陈莹 于 2012-8-31 16:23 编辑

System.out.println(str1+"和"+str2+"相等吗?:"+str1==str2);
这个语句错了
“+”的优先级高于“==”,所以相当于(str1+"和"+str2+"相等吗?:"+str1)==str2了
编译后就成为“abc和abc相等吗?:abc”==“abc”,打印的只有false。
你应该向第一个程序那样将str1==str2括起来(str1==str2),明白了吗?
作者: 高廷平    时间: 2012-8-31 16:33
{:soso_e106:}了解!
作者: 高廷平    时间: 2012-8-31 16:39
标题: RE: 迷惑???[已解决]
此问题一解决!:lol
作者: 芦曦    时间: 2012-8-31 16:45
输出语句有错误: System.out.println(str1+"和"+str2+"相等吗?:"+str1==str2); +号是字符串连接符。
改成这样 System.out.println(str1+"和"+str2+"相等吗?:"+(str1==str2));
输出的结果就是你想要的了。




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