Java 整数v/s int
请在oracle文档页面上阅读以下内容: 通常需要将基元类型的值表示为对象。包装类Java 整数v/s int,java,wrapper,primitive,Java,Wrapper,Primitive,请在oracle文档页面上阅读以下内容: 通常需要将基元类型的值表示为对象。包装类Boolean,Character,Integer,Long,Float,和Double用于此目的 我不确定我是否理解为什么需要这些。它说它们有一些有用的函数,比如equals()。但是如果我可以做(a==b),为什么我要将它们声明为整数,使用更多内存并使用equals()?2的内存使用情况有何不同?将int放入数据结构时,通常会将它们包装在包装类中。因此,.equals方法用于确定何时调用数据结构上的.conta
Boolean
,Character
,Integer
,Long
,Float
,和Double
用于此目的
我不确定我是否理解为什么需要这些。它说它们有一些有用的函数,比如
equals()
。但是如果我可以做(a==b)
,为什么我要将它们声明为整数
,使用更多内存并使用equals()
?2的内存使用情况有何不同?将int放入数据结构时,通常会将它们包装在包装类中。因此,.equals方法用于确定何时调用数据结构上的.contains方法
其他有用的方法:
托斯特林
Tohextstring
parseString只支持类类型。而且由于原语不是类,它们不能与泛型一起使用。但是,原语的包装类可以用作泛型类型。例如,您可以不声明ArrayList
,但可以使用ArrayList
实现类似的功能
它还偶尔用于将变量的值初始化为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的问题: 即使它们是相同的值(这是.equals测试的结果),但自从你说了两次“new”之后,它们就不是同一块内存了。a=但a等于(b) 现在,它们使用相同的记忆片段,这意味着如果你改变一个,你就同时改变它们(除非你再次使用“new”)。a==b和a.equals(b)
现在又是一次=但是a.equals(b)=真,因为它们又一次具有相同的值,但它们位于不同的内存块上。两件事。首先,Integer.parse也可以用于基本类型。事实上,Integer.parseInt返回int而不是Integer。第二,您不能按照建议更改变量“a”,因为Integer是一个不可变的类。@axelrod360我看到equals可以用来比较值和比较引用。我猜Integer中定义了parseInt,因此可以从那里调用它。+1甚至在泛型、集合、列表、集合和映射只存储对象之前。我明白了。但是为什么Java设计人员要设计泛型,使其不与原语一起工作,而int在初始化时不设为null呢?他们一定看到了使用Integer比int更有用的东西。集合不接受原语这一事实与泛型无关。
Integer a = new Integer(5);
Integer b = new Integer(5);
Integer a = new Integer(5);
Integer b = a;
//using last code block
b = new Integer(5);