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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高廷平 中级黑马   /  2012-8-31 16:06  /  1932 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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相等吗?”   跑哪里去了呢?

6 个回复

倒序浏览
本帖最后由 周兴华 于 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)要括起来
  //==比较的是内存地址
}
}
回复 使用道具 举报
这是一个很低级的错误,+  是字符串连接符,你输出的是 (str1+"和"+str2+"相等吗?:"+str1)和 str2 是否相等, 那肯定是false啦
回复 使用道具 举报
本帖最后由 陈莹 于 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),明白了吗?
回复 使用道具 举报
{:soso_e106:}了解!
回复 使用道具 举报

RE: 迷惑???[已解决]

此问题一解决!:lol
回复 使用道具 举报
芦曦 中级黑马 2012-8-31 16:45:48
7#
输出语句有错误: System.out.println(str1+"和"+str2+"相等吗?:"+str1==str2); +号是字符串连接符。
改成这样 System.out.println(str1+"和"+str2+"相等吗?:"+(str1==str2));
输出的结果就是你想要的了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马