如何在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()。
顺便说一句,自动装箱/拆箱在内部与第一种方法相同。