Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 整数v/s int_Java_Wrapper_Primitive - Fatal编程技术网

Java 整数v/s int

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

请在oracle文档页面上阅读以下内容:

通常需要将基元类型的值表示为对象。包装类
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);