没有人按照你想要的方式创建这些包装器,这是有一些原因的。
- 性能
- 垃圾收集器开销
- 没有自动装箱/拆箱
- 接口不好/无用
- 存在更简单的处理方式
前四个点可以通过一个小的C示例来说明:
unsigned int x=42, y, m=5, t=18;
y = x * m + t;
这需要翻译成:
UInteger m = new UInteger(5);
UInteger t = new UInteger(18);
UInteger x = new UInteger(42);
UInteger y = x.multiplyBy(m);
y = y.add(t);
需要翻译的内容如下:
需要创建几个包装对象,multiplyBy
和add
将生成更多。如果这种方式进行了许多计算,将会给垃圾回收器带来很大负担。包装和解包也会浪费CPU资源。
即使是简单的算术运算,编写或阅读起来也很麻烦是显而易见的。
出于同样的原因,没有人使用有符号的包装类型进行算术运算。
如果您使用比当前有符号类型要大一级的数据类型进行计算,并像这样截断上部分,则所有这些都是不必要的:
long x=42, y, m=5, t=18
y = (x*m + t) & 0xFFFFFFFF
使用下一个最大的有符号类型也可以在Java和数据库之间进行转换。由于JDBC不会创建这些无符号包装类型,您必须自己完成这项工作,然后将数据转换为无符号包装器。
我自己进行了一些CPU密集型数据处理,并处理了二进制协议。在这些情况下,我希望也有无符号数据类型。但是在Java中使用包装器类型模拟它们比直接处理每个单独的情况更具问题。