我正在翻译C++代码,其中大量使用了typedef。我不能 在 Java 中这样做,所以我做的是:
// C++
typedef unsigned int BucketKey;
// Java
public class BucketKey {
public int val;
}
我不是 Java 专家,实际上是新来的,我想知道有多贵 是不是直接用int,而是用BucketKey?
顺便提一下,我需要至少再对 5 种类型执行此操作。
谢谢
最佳答案
它会增加巨大的开销,尤其是在您有数组的情况下。我建议编写一个测试程序进行比较。
在 Java 中,int[100]
创建一个包含 100 个整数的数组 - 类似于 C/C++,Integer[100]
或 YourObjectContainingAnIntMember[100]
有一个包含 100 个引用(指针)的数组,指向 100 个不同的对象。
更不用说 BucketKey
对象将具有引用语义,但 int
具有类似于 C++ 中的值语义:
BucketKey x = new BucketKey(100);
BucketKey y = x
y.value = 200; // x will change as well
int x = 100;
int y = x;
y = 200; // x will remain 100
还值得补充的是,C++ 中的 typedef 也不会创建新类型。所以 BucketKey
变量的类型只是 int - 但 Java 没有 typedef 来调用 int
的更多方法。不同类型的 C++ 解决方案是
struct BucketKey {
value x;
}
关于Java:如果我使用封装在类中的原始数据类型,它会慢多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14325948/