



























与C#一样,java也对基本类型进行了封装,int封装出Integer类,boolean封装出Boolean类。这样一来,基本类型就突破了值类型的限制,获得了面向对象的好处。然而,与.NET不同,java中的封装类是真正的引用类型,比如在java中用“==”比较两个封装类对象,尽管值相等,得到的结果也很可能是false,而不是像.NET一样,将基本类型的一些操作符作了重载,使得“==”符号的行为看起来与基本类型完全一致。
在java中,“Integer i=10,j=10;”使得i==j为true,但如果i或者j任何一个使用“new Integer(10)”,那么i==j的值将是false,因为java遇到new关键字就会开辟新的堆空间,这样就导致两个封装类对象的引用地址不同。同样的差异还出现在String类型。对此在java中强烈推荐使用equals方法而不是“==”来比较封装类对象的值。
测试代码如下:
code
public class ValueType
{
public static void main(String[] args)
{
int ii = 10, jj = 10;
System.out.println("ii==jj:" + (ii == jj)); // true
Integer i = new Integer(10), j = new Integer(10);
System.out.println("i==j:" + (i == j)); // false
System.out.println("i.equals(j):" + i.equals(j)); // true
System.out.println("ii==j:" + (ii == j)); // true
System.out.println("i.equals(jj):" + i.equals(jj)); //true
String x = "xxx";
String y = "xxx";
String z = new String("xxx");
System.out.println(
"x==y:" + (x == y)); //true此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。