java怎么实现自定义数值类型运算符重载?

乌龟壳 发布于 2016/10/14 18:29
阅读 952
收藏 0

如Int/Double等包装类型,在java里是怎么实现Double + Int这类操作的,难道是编译器hack了?

我是要设计一个类似BigDecimal的数据结构(功能不同),但是想重用+-*/运算让代码好看一些。

对于非基本类型,能看到似乎是可以支持重载的,我知道全世界都在说java不支持重载,只是想知道以下代码是怎么实现的。

Double a = 0.1; //Double不是基本类型,是rt.jar里面的一个class
System.out.println(a * 8);



以下是问题补充:

@乌龟壳:可能真的是被编译器写死了 http://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.8 (2016/10/14 20:08)
加载中
0
萦水欷心
你举的 Double 的例子是 autoboxing 特性,java 5 加入的,是自动转换为了对用的基本类型。
1
漂浪天下
java不支持运算符重载
kakai
kakai
正解
0
乌龟壳
乌龟壳

引用来自“实迷途其未远觉今是而昨非”的评论

并不能。。。
Double a = 0.1;
System.out.println(a * 8);

Double并非基本类型,是在rt.jar里面的一个类而已,它既然能实现一定程度的运算符重载,或许有什么方式也能让别的自定义类也实现。

当然,除非编译器hack了如Double/Float/Boolean这些类,特别对它进行了照顾除外。我其实就想问清楚里面具体的情况。

GestureWei
GestureWei
java.lang.Double进行算数运算是自动拆箱,跟类运算符重载没关系,java不支持这个
0
GestureWei
GestureWei
java.lang.Double是自动拆箱的,跟所谓类运算符重载没关系,java不支持这个。所有与基本类型相对的类都支持自动拆箱和装箱
0
南湖船老大
南湖船老大

java不支持运算符重载,String里的+例外(不过这个也不是真的运算符重载)。

你说的是装箱

返回顶部
顶部