Java"ANSI常量"

Dol*_*000 19 java history naming-conventions

我在浏览Java代码约定时遇到了这个小小的问题:

声明类常量和ANSI常量的变量名称应全部为大写,并用下划线("_")分隔.(为了便于调试,应避免使用ANSI常量.)

(从这里开始.)

这个文件中提到的这些"ANSI常量"是什么?他们如何使调试更难?

该文本听起来好像在"变量声明类常量"(我将其解释为普通static final变量)和这些"ANSI常量" 之间存在二分法,但我不知道在Java中声明常量的任何方法除了让他们static final变量.

aio*_*obe 8

它们很可能是指ANSI C常量,定义如下

在ANSI C中,常量可以通过两种方式定义:通过#define语句并通过使用const修饰符.例如,以下两个语句是等效的:

#define LENGTH 10       /* Length of the square in inches */

const int length = 10;  /* Length of the square in inches */
Run Code Online (Sandbox Code Playgroud)

现在Java中显然没有C常量,因为Java不是C :-)(这不是官方编码约定中最奇怪的部分,但我离题了).

那他们为什么要编写ANSI常量呢?这很可能只是引用最终基元和不可变对象的便捷方式.请记住,在C中,a的字段const struct在初始化后无法更新,并且没有相应的Java术语表示这种"常量"(final不能很好地捕获不变性的概念).

  • 感谢您的回答,但这实际上只是猜测;我希望得到一个更权威的答案。另外,对我来说,说有人将“C”称为“ANSI”似乎有些牵强,但谁知道呢。:) (2认同)
  • 对.我确实找到了[文档的旧版本](http://www.oracle.com/technetwork/java/codeconventions-150003.pdf),其中(不小心?)中有C代码(在ANSI常量部分的正上方) ).所以我不会说延伸到C是*那个*远:-)但我也对此感到好奇,我会尽力与作者联系.会更新. (2认同)

Jon*_*oni 7

互联网上关于什么是ANSI常量的唯一参考是在论坛中,阅读命名约定的人会问同样的问题.这个词似乎是由撰写文档的人发明的,你必须问他们的意思.

ANSI是美国的国家标准机构,例如以ASCII字符集标准和ANSI C语言标准而闻名.ANSI也是Microsoft Windows调用的基于区域ASCII的默认字符编码.作者可能是指字符串文字.

  • *“作者可能指的是字符串文字。”* -- 不太可能。Java 字符串文字不是 ASCII,而是 UTF-16。 (2认同)