如何在Java中将10乘以"整数"对象?

时间:2020-03-05 18:48:16  来源:igfitidea点击:

如何将10乘以一个"整数"对象并取回"整数"对象?

我正在寻找做到这一点的最简洁的方法。

我可能会这样:
从" Integer"对象获取int,将其与另一个int相乘,然后使用此int值创建另一个Integer对象。

代码将类似于...

integerObj = new Integer(integerObj.intValue() * 10);

但是,我看到了一个代码,作者在这样做:

代码是这样的:

String s = integerObj + "0";
integerObj = Integer.parseInt(s);

两种方式都有优点吗?

在这种情况下,总体上最有效/最有效的方法是什么?

解决方案

回答

字符串方法很有趣,但几乎肯定是一种不好的方法。

获取Integer的int值并创建一个新值非常快,因为parseInt调用起来非常昂贵。

总体而言,我同意原始方法(如其他人所指出的,如果我们具有Java 5中引入的自动装箱功能,则可以在不造成太多混乱的情况下完成)。

回答

使用Java 5的自动装箱,我们可以轻松地执行以下操作:

Integer a = new Integer(2); // or even just Integer a = 2;
a *= 10;
System.out.println(a);

回答

远离第二种方法,如果我们使用的是Java 1.5,最好的选择是自动装箱,任何较早的示例都是最好的。

回答

出于多种原因,使用String方法的解决方案效果不佳。有些是出于美学原因,而另一些则是实用的。

实际上,与普通形式相比,String版本创建的对象更多(如我们在第一个示例中所表达的)。

从美学的角度来看,我认为第二个版本掩盖了代码的意图,而这与使代码产生所需的结果几乎一样重要。

回答

第二种方法的问题是在Java中处理字符串的方式:

  • 在编译时," 0"将转换为常量String对象。
  • 每次调用此代码时,s都会被构造为新的String对象,而javac会将其转换为String s = new StringBuilder()。append(integerObj.toString())。append(" 0") .toString()(旧版本的StringBuffer)。即使我们使用相同的integerObj,即String s1 = integerObj +" 0";字符串s2 = integerObj +" 0";(s1 == s2)将为false,而s1.equals(s2)将为true。
  • 因为Integer是不可变的,所以Integer.parseInt会在内部调用new Integer()。

顺便说一句,自动装箱/拆箱在内部与第一种方法相同。