原来,(
java.lang.String 的 intern()方法
"abc".intern()方法的返回值还是字符串"abc",表面上看起来好像这个方法没什么用处。但实际上,它做了个小动
作:
检查字符串池里是否存在
"abc"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会
把
"abc"添加到字符串池中,然后再返回它的引用。
)
更好的办法:
把所有的
String 都 intern()到缓冲池去吧
最好在用到
new 的时候就进行这个操作
String s2 = new String("Monday").intern();
然后就可以用
==比较两个字符串的值了
二、简单数据类型和封装类中的
equals 和==
Java 为每一个简单数据类型提供了一个封装类,每个基本数据类型可以封装成对象类型。
除
int(Integer)和 char(Character),其余类型首字母大写即成封装类类型名。double (Double),
float(Float),long(Long), short(Short),byte(Byte),boolean(Boolean).
以
int 和 Integer 为例说明
Java 中 int 和 Integer 区别如下:
1.int 是基本的数据类型,默认值可以为 0;
2.Integer 是 int 的封装类,默认值为 null;
3.int 和 Integer 都可以表示某一个数值;
4.int 和 Integer 不能够互用,因为他们两种不同的数据类型;
int a1=1;
int a2=1;
Integer b1 =new Integer (1);
Integer b2 =new Integer (1);
------------------------------
a1==a2 这个是成立的,很简单,都知道
a1==b1 这个是不成立的.表达式的值为 false ,它们是不同的数据类型
(在
jdk1.5 以上版本中为 true)
b1==b2 这个也是不成立的.表达式的值为 false,虽然是相同的数据类型,但是它们是两个对象,==比较的是 2 个对
象的地址
,它们的地址是不相等的,内容相等都是 1;
b1.equals(b2)==true 这个是成立的,表达式的值为 true. 相同数据类型,两个对象,地址不同,内容相同, quals 比较
的是
2 个对象的内容,所以成立。
(a.equals(b),因为 equals 比较的是两个对象,
所以
a,b 都不能为基本数据类型
,否则会出编译错误。
)
(在
jdk1.5
以上版本中,
b 可以为基本数据类型,a 不可以)
同理
,其它的封装类和基本类型也是这样的.
java 中 equals 和==的区别
==比较的是 2 个对象的地址,而 equals 比较的是 2 个对象的内容。
在
jdk1.5 以上的版本中,基本类型和封装类能自动转化,与 String 类型的对象和字符串常量类似。
Integer i1 = 123;