Java 使用新整数(a)比使用
说我有一些代码Java 使用新整数(a)比使用,java,Java,说我有一些代码 public List<Integer> cardIndexes() { List<Integer> selected = new ArrayList<Integer>(); for (int k = 0; k < cards.length; k++) { if (cards[k] != null) { selected.add(new Integer
public List<Integer> cardIndexes() {
List<Integer> selected = new ArrayList<Integer>();
for (int k = 0; k < cards.length; k++) {
if (cards[k] != null) {
selected.add(new Integer(k));
}
}
return selected;
}
公共列表索引(){
所选列表=新建ArrayList();
对于(int k=0;k
其中,如果卡片索引中的点不等于null,它将用一组整数填充名为selected的列表。我只是想知道使用
selected.add(newinteger(k))是否有什么好处代码>,仅使用所选的。添加(k)代码>。我假设这里获得的优势是,您可以调用方法直接在k上修改k,而不必使用newinteger(k)代码>,但这是这里获得的唯一优势吗?自Java 5以来,有一种自动装箱功能,它将从一个基本变量自动创建对象包装类的实例。简而言之,没有,没有任何优势。自Java 5以来,有一种自动装箱技术,它将从一个基本变量自动创建对象包装类的实例。简而言之,没有,没有优势。唯一的“优势”(如果您愿意这样称呼的话)是newinteger(a)
使Java的自动装箱显式可见
在您的情况下,这不是一个问题,但有些情况可能会令人困惑,特别是当您将类与原语混合使用时(Eclipse将自动装箱转换标记为错误/警告是有原因的)
相反,自动装箱将导致字节码中出现Integer.valueOf(a)
,出于内存消耗和性能(cf.)的原因,通常优先于new Integer(a)
:
公共静态整数值(int i)
返回表示指定int值的整数实例。如果
不需要新的整数实例,通常应使用此方法
优先于构造函数整数(int)使用,因为此方法是
可能通过以下方式产生显著更好的空间和时间性能
缓存频繁请求的值。此方法将始终缓存
范围为-128到127(含)的值,并且可以缓存其他值
在这个范围之外
唯一的“优势”(如果您愿意这样称呼的话)是newinteger(a)
使Java的自动装箱显式可见
在您的情况下,这不是一个问题,但有些情况可能会令人困惑,特别是当您将类与原语混合使用时(Eclipse将自动装箱转换标记为错误/警告是有原因的)
相反,自动装箱将导致字节码中出现Integer.valueOf(a)
,出于内存消耗和性能(cf.)的原因,通常优先于new Integer(a)
:
公共静态整数值(int i)
返回表示指定int值的整数实例。如果
不需要新的整数实例,通常应使用此方法
优先于构造函数整数(int)使用,因为此方法是
可能通过以下方式产生显著更好的空间和时间性能
缓存频繁请求的值。此方法将始终缓存
范围为-128到127(含)的值,并且可以缓存其他值
在这个范围之外
在您的情况下,您可以简单地执行以下操作:
selected.add(k);
因为自动装箱将创建一个整数
对象以添加到列表
我假设这里获得的优势是,您可以调用方法直接在k上修改k,而不必使用新的整数(k)
不,Integer
是不可变的(与所有基本包装类一样)。这些类是基本类型的包装器,主要作为标准对象在集合中使用,并提供实用功能(例如类型之间的转换)
但是如果你在意性能(如果你在大列表上有算术),你应该知道装箱/拆箱以及何时使用int[]
与ArrayList
相比 在您的情况下,您只需执行以下操作:
selected.add(k);
因为自动装箱将创建一个整数
对象以添加到列表
我假设这里获得的优势是,您可以调用方法直接在k上修改k,而不必使用新的整数(k)
不,Integer
是不可变的(与所有基本包装类一样)。这些类是基本类型的包装器,主要作为标准对象在集合中使用,并提供实用功能(例如类型之间的转换)
但是如果你在意性能(如果你在大列表上有算术),你应该知道装箱/拆箱以及何时使用int[]
与ArrayList
相比 k
此处不能为空;Java编译器在装箱时要做的是调用Integer.valueOf()
,而不是newinteger()
。这里没有优点或缺点的问题:在Java中不能有基元类型的集合;Java编译器在装箱时要做的是调用Integer.valueOf()
,而不是newinteger()
。没有优劣之分:在Java中不能有基元类型的集合。更准确地说:创建一个实例或从缓存中重用一个实例。@ZhekaKozlov这对整数有效,AFAIKFloat
和Double
没有缓存。更准确地说:创建一个实例或从缓存中重用一个实例。@ZhekaKozlov对Integer
有效,AFAIKFloat
和Double
没有缓存。