免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1871 | 回复: 8
打印 上一主题 下一主题

一个关于字符串比较的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-01 18:04 |只看该作者 |倒序浏览
public class BJ
{
public static void main(String args[])
{
  String s1=new String("How");
  String s2=new String("How");
  System.out.println(!(s1==s2));
}
}
为什么会输出true?

论坛徽章:
0
2 [报告]
发表于 2007-01-01 18:14 |只看该作者
new要生成新对象的。“==”可认为是判断两边是否是同一个对象。两次new是两个对象。

你试过"How" == "How"吧

论坛徽章:
0
3 [报告]
发表于 2007-01-03 00:04 |只看该作者
这就是对象实例与字面值的分别!

论坛徽章:
0
4 [报告]
发表于 2007-01-03 00:04 |只看该作者
原帖由 fantix 于 2007-1-1 18:14 发表
new要生成新对象的。“==”可认为是判断两边是否是同一个对象。两次new是两个对象。

你试过"How" == "How"吧


不完全是这样的,
“==”是判断两者的内存地址是否一样。
按道理说,
String a = "HOW";
String b = "How" ;

变量a, b 的地址应该是不一样的, 但是由于都是赋值给常量, 编译器会自动优化的, 如果两个变量的值都是一个常量, 那么这两个变量都回指向同一个地址(变量和常量在内存里边存放的地方不一样, 一个放堆, 一个放栈, 具体那个放哪里我忘了, 呵呵)。

equals判断的是两个内存地址里边的内容是否一样。所以一般的判断都用equals


另外,如果楼主赋值的时候, 这样做:

String a = new String("How");
String b = new String("How");

那么结果就等于false, 也就是 a != b.

论坛徽章:
0
5 [报告]
发表于 2007-01-04 03:26 |只看该作者
String a = "HOW";

是不是笔误写成大写了
变量和常量在内存里边存放的地方不一样, 一个放堆, 一个放栈

new关键字会在JVM Heap中创建对象
常量你是不是想说像"How"、3.5f这样的量?还是static final对象?他们似乎没有必要用栈放吧
equals判断的是两个内存地址里边的内容是否一样。

你是指其中一个Reference引用的Object的equals方法,以另一个Reference作为参数时返回结果是否为true么?
所以一般的判断都用equals

我认为这个应该依照情况来定吧,怎么能一般……都呢,尽管大多数情况用equals(Object)
另外,如果楼主赋值的时候, 这样做:

String a = new String("How");
String b = new String("How");

怎么感觉与楼主写的没什么区别?是不是因为楼主这一句
System.out.println(!(s1==s2));

你没注意非运算符

纯属学术研究,呵呵

[ 本帖最后由 fantix 于 2007-1-4 03:28 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-01-04 15:49 |只看该作者

回复 1楼 niqiumao 的帖子

是分别生成了两个不同的对象

论坛徽章:
0
7 [报告]
发表于 2007-01-04 16:29 |只看该作者
因为生成了两个对象,
所以引用值(指针)肯定是不同的
java中==比较的是两个对象的引用值,所以lz的程序输出的是true

论坛徽章:
0
8 [报告]
发表于 2007-01-05 12:39 |只看该作者
非常感谢大家!

论坛徽章:
0
9 [报告]
发表于 2007-01-05 16:11 |只看该作者
呵呵,我刚学Java时候遇到的题目。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP