java String字符串的比较问题

[复制链接]
查看11 | 回复5 | 2012-1-17 10:23:07 | 显示全部楼层 |阅读模式
1.需要引入字符串池的概念(String pool),但要创建字符串对象的时候,首先会搜索字符串池是否已经存在,如果存在则不创建。2.==是比较对象的引用,也就是对应内存的地址是否一样。3.这样的问题,在通常的开发中不会应用,但会出现在面试中。4.s1和s2引用了同一个地址,所以是true。而s3是由三个字符串对象创建新的字符串,因此不是同一个对像,为false。5.要对字符串的intern()进行了解及 The Java Language Specification的3.10.5 String Literals。参考jdk api。package testPackage;class Test {public static...
回复

使用道具 举报

千问 | 2012-1-17 10:23:07 | 显示全部楼层
与String池有关:java 虚拟机中本身含有了一些字符了。如果没有某字符串,才创建个字符串。这样一来就可以多个变量去引用某个字符串了。s1 == s3 为false是因为s3 指向 a + b + c 变量的运算结果,未来节省空间。会创建1个StringBuffer 来存放数据。最后toString()返回字符串,是新分配的。...
回复

使用道具 举报

千问 | 2012-1-17 10:23:07 | 显示全部楼层
s1 和 s2 是引用了栈内存中的"abc"字符串 所以是同一个对象s3则是经过a b c三个对象的计算产生了新的对象在堆内存中,而==操作符是比较两边的对象是否是同一个对象。...
回复

使用道具 举报

千问 | 2012-1-17 10:23:07 | 显示全部楼层
个人推测:右边是双引号的情况下,String对象声明并初始化的时候返回的是同一个对象,所以s1==s2是成立的;右边是对象的情况下,String对象声明并初始化的时候返回的是新的对象,所以s1==s3不成立。建议String比较的话使用equals方法s1.equals(s3)...
回复

使用道具 举报

千问 | 2012-1-17 10:23:07 | 显示全部楼层
==比较的是两边的对象是否是同一个对象 并且值相等equals比较值s3是 新产生的对象和s1不等所以false而System.out.println(s1.equals(s3));值为true...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行