Java:如果我使用封装在类中的原始数据类型,它会慢多少?

标签 java c++ porting

我正在翻译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/

相关文章:

c++ - 库位于计算机的哪个位置?

linux - 套接字选项 SO_SNDLOWAT 的用途是什么

c++ - 将 C++ 从 Linux 移植到 Windows, '__aligned__'

java - VersionResourceResolver 不起作用

java - 显示可扩展列表子项而不触摸标题

c++ - 为什么这个结构的大小是 24?

c++ - 如何在 VC++ 中将 HTML Unicode 文本设置为剪贴板?

c++ - g++模板问题

java - 如何从回收者 View 适配器获取项目

java - Eclipse 生成 setter