【发布时间】:2011-01-26 06:30:35
【问题描述】:
BigInteger 是否只有equals 用于比较?
是否有像
现在我想知道,有没有办法在迭代中使用BigInteger,例如while 和for?
【问题讨论】:
标签: java math biginteger notation
BigInteger 是否只有equals 用于比较?
是否有像
现在我想知道,有没有办法在迭代中使用BigInteger,例如while 和for?
【问题讨论】:
标签: java math biginteger notation
您可以使用compareTo 方法。
【讨论】:
你不能使用数学符号,事实上我也不会养成使用 == 的习惯,我很确定除非他们使用一些严重的诡计,否则它会失败。
a = new BigInteger(500);
b = a;
if( a == b )
will always be true
b=new BigInteger(500);
if( a == b )
will never be true
if( a.equals(b) )
will always work fine.
Java 对于这类东西来说并不是一种很好的语言——我真的很喜欢 Java,但最终在实现一个 Complex 类以及实现一个可以保存和操作复杂类的矩阵时遇到了很多麻烦。
我的解决方案是使用 Java 创建核心类,然后使用 Groovy 创建使用核心类的类。如果您遵循某些命名模式,那么您可以在任何类上使用任何运算符。
或者,如果您只想处理大数字,只需使用 groovy,甚至不为变量声明类型 - 它会自动将它们提升为您需要的任何类型。
【讨论】:
BigInteger 只能保存整数,所以5.5 不起作用。你可能在想BigDecimal。即使是BigDecimal:使用the constructor that takes a double is almost always a bad idea!
new 返回除新对象之外的任何内容。所以你的第二张a==b 支票永远不会返回true。 b.add(100); 也没有可见的效果,因为 add() 不会修改 BigInteger 实例(毕竟它是不可变的),而是将结果作为新对象返回。
BigInteger 实例的“黑魔法”适用于 BigIniteger.valueOf() 而不是 new BigInteger。
Java 运算符仅设计为仅对原始数据类型进行操作;他们不对班级采取行动。由于 BigInteger 是一个类,所以只能通过类方法进行算术比较和运算。
【讨论】: