为什么Java中没有二进制字面量?

22

为什么不包括这种字面值,而允许使用十六进制和八进制格式?是否有特定的原因?


大多数编程语言都没有包含它,也许这就是 Java 没有包含它的原因。但无论如何,我想知道一般的原因。 - Shamim Hafiz - MSFT
感谢大家的快速回复。总的来说,我认为它没有被包含在内仅仅是因为C语言本身不支持,而不是因为它增加了复杂性。虽然八进制被包含在内,但与二进制相比,我并没有看到它有多大用处,只是因为C语言支持它。正如我们从这个提案中所看到的http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000929.html,在位操作领域,二进制字面量具有许多优点。 - Adrian M
6个回答

26

Java 7包含这个功能。查看新功能

例子:

int binary = 0b1001_1001;

8
这里有一个更近期和更“官方”的参考资料 - http://openjdk.java.net/projects/coin/ - Stephen C
1
很棒的链接+1。它引导我到了这个网址http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000929.html,该网址总结了我想看到二进制字面量的所有原因。 - Adrian M
2
这是更近期的链接:http://download.oracle.com/javase/7/docs/technotes/guides/language/binary-literals.html - Thomas Rawyler

24

Java 7引入了二进制字面量。请参见“改进的整数字面量”

int i = 0b1001001;

一开始不包含它们的原因可能是:Java是一种高级语言,在涉及不太重要和低级别的语言结构时非常严格。Java开发者普遍遵循“如果有疑问,就排除”的策略。

如果你使用的是Java 6或更早版本,则最好的选择是执行:

int yourInteger = Integer.parseInt("100100101", 2);

4
C是一种中级语言,历史上在非常底层的语言结构方面非常自由。尽管如此,它没有二进制文字。 - Fred Foo
1
是的,我认为这很奇怪。但据我所知,它在GCC中已经存在了相当长的时间。 - aioobe
1
有多少人认为八进制字面量比二进制字面量更有用? - supercat

2

1

相关的错误自2004年4月以来一直处于开放状态,优先级较低,并被Sun/Oracle视为增强请求。

我猜他们认为二进制字面量会使语言更加复杂,而且没有明显的好处...


0

0

这里似乎有一种印象,即实现二进制字面量很复杂。其实不是这样的。只需要大约五分钟就可以完成。当然还要加上测试用例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接