2014-01-24 16 views
1

每个人都知道在Java中简单的算术题是如何工作的原语:Java注解对非原始数字的简单算术

int one = 1,two = 2,three = one + two; 
double four = (one + two)/three; 
if(four % 1 == 0){ 
    System.out.println("Yay for simple maths!"); 
} else{ 
    throw new RealityError("http://www.youtube.com/watch?v=H91rPIq2mN4"); 
} 

但是你离开原语的那一刻事情就变得复杂快!试图重复以前的简单算术非常困难!

BigInteger bigOne = BigInteger.ONE, bigTwo = BigInteger.valueOf(2), 
      bigThree = bigOne.add(bigTwo); 
    BigDecimal bigFour = new BigDecimal(bigThree.divide(bigOne.add(bigTwo))); 
    if (BigInteger.valueOf(bigFour.longValueExact()).mod(BigInteger.ONE).equals(BigInteger.ZERO)) { 
     System.out.println("Yay for simple maths?!?!"); 
    } else { 
     throw new RealityError("http://www.youtube.com/watch?v=H91rPIq2mN4"); 
    } 

为什么不是用于像+, -, *, or /这样的运营商的注释?如@DefaultAddOperator为扩展Number的类。或者,在BigInteger类中,为什么它不能实现一个接口,该接口只说明在类上调用操作符时要执行的操作。这个概念并没有太多提及,我的意思是它与"Hello World!".toString()和重载的运算符+一起使用,并且将大大简化上述基于类的算术。

+1

这样的注释放在哪里? –

+2

请搜索“运算符重载[java]”。这个问题是许多老问题的重复。这是一个复杂的问题,没有答案可以为你解决问题。 –

回答

1

这是因为java不支持运算符重载,如。看看他们的语言。此外,groovy使用BigDecimal作为非整数操作的主要类型。它支持所有这些基本操作。