当使用JNI在Java和C之间进行接口时,javah将Java中的布尔值解析为 jBoolean
在JNI头文件中。我用的时候 bool
在C文件中,Visual Studio编译器会发出警告
警告C4800:'jboolean':强制值为bool'true'或'false'(性能警告)
是否应该使用其他任何数据类型?或者如果 bool
这是唯一的数据类型,我可能遇到的性能问题究竟是什么?
当使用JNI在Java和C之间进行接口时,javah将Java中的布尔值解析为 jBoolean
在JNI头文件中。我用的时候 bool
在C文件中,Visual Studio编译器会发出警告
警告C4800:'jboolean':强制值为bool'true'或'false'(性能警告)
是否应该使用其他任何数据类型?或者如果 bool
这是唯一的数据类型,我可能遇到的性能问题究竟是什么?
“性能问题”是演员阵容不是完全免费的。投射到 bool
本质上意味着强制所有非零值 1
这需要一点点代码,而不是像“扩展”那样的“免费”演员 char
至 int
。 “性能问题”是一些额外的机器指令。如果你在一个紧密的循环中这样做了一百万次,好的,也许你在乎 - 否则,不,你根本不应该在意。这是IMO一个愚蠢的编译器警告;增加的小成本只是您在使用时所做出的妥协的一部分 bool
并且编译器不应该打扰你。
尝试转换为BOOL。您可能会发现此主题也很有趣: bool和BOOL之间的区别。
我不太确定这是你在找什么。 BOOL是16位,而不是8位。如果可以,那么它比你所寻找的更接近于布尔。否则你可以使用byte。请注意,如果你最终投射到任何这些,你将无法做到 ==是的 了。我在提供的链接中也对此进行了解释。