阅读oracle文档java.lang页面上的内容:
经常需要将基元类型的值表示为对象。包装类
Boolean
、Character
、Integer
、Long
、Float
和Double
用于此目的。
我不知道为什么需要这些。它说它们有一些有用的功能,比如equals()
。但是,如果我可以做(a==b)
,为什么我要将它们声明为Integer
,使用更多的内存并使用equals()
?2的内存使用情况有何不同?
ArrayList<int>
,但可以使用ArrayList<Integer>
实现类似的功能。
它也偶尔用于将变量的值初始化为null
。但是,不能将基元设置为null
;该特权是为对象保留的。
// This is OK
Integer iDontKnowValueYet = null;
// Compile error!
int iDontKnowThisYetEither = null;
像int、char、double这样的东西都是基元,这意味着它们不需要使用"new"来实例化。Integer、Character、Double等对象在计算机上占据了更多的空间(因为对象的开销更大),但您可以使用Integer.parse()等方法。通常,如果需要其中一种方法,请使用基元并仅使用对象版本。
要回答关于a==b与a的问题,等于(b):
Integer a = new Integer(5);
Integer b = new Integer(5);
即使它们是相同的值(这就是.equals测试的目的),它们也不是同一块内存,因为你说了两次"new"。a=b但a.等于(b)
Integer a = new Integer(5);
Integer b = a;
现在它们使用相同的内存,这意味着如果你更改一个,你就同时更改它们(除非你再次使用"new")。a==b且a等于(b)
//using last code block
b = new Integer(5);
现在又是一次=b,但a.equals(b)==true,因为它们再次具有相同的值,但它们在不同的内存块上。
当您将int放入数据结构中时,它们通常被包装在包装器类中。因此,.equals方法用于确定何时在数据结构上调用.contents方法。
其他有用的方法:toStringtoHexStringparseString