Color.red与Color.RED之间的区别

51

setXxx(Color.red)setXxx(Color.RED) 之间的真正区别是什么?

我在网上找到了以下解释,这是关于命名规范的吗?

Java最初使用小写字母定义了一些颜色常量名称,这违反了使用大写字母表示常量的命名规则。它们在所有Java版本中都可用:Color.black,Color.darkGray,Color.gray,Color.lightGray,Color.white,Color.magenta,Color.red,Color.pink,Color.orange,Color.yellow,Color.green,Color.cyan,Color.blue

Java 1.4添加了适当的大写名称作为常量:Color.BLACK,Color.DARK_GRAY,Color.GRAY,Color.LIGHT_GRAY,Color.WHITE,Color.MAGENTA,Color.RED,Color.PINK,Color.ORANGE,Color.YELLOW,Color.GREEN,Color.CYAN,Color.BLUE


2
常量的编码规范是使用大写字母。使用大写字母表示它是一个常量。 - Peter Lawrey
11
"RED" 比 "red" 至少红了三倍。而且更加愤怒。 - arserbin3
3
常量的编码约定是UPPER_CASE,但请注意RED实际上不是常量,因为它是一种颜色(Color),而不是基本类型或枚举。我认为,在编写代码时人们使用的常量定义与JLS中对常量的定义不一致。 - Hakanai
3个回答

74

这是代码本身:

public final static Color red = new Color(255, 0, 0);

public final static Color RED = red;

大写字母是在JDK 1.4中引入的(为了符合命名约定,规定常量必须使用大写字母)。

本质上,它们没有任何区别(除了字母大小写)。


如果我真的想冒险一试,Oracle可能会疯狂地删除小写的常量,但那将破坏所有先前编写的代码,该代码是在JDK 1.4之前编写的。你永远不知道,我建议对常量使用大写字母。不过,必须先弃用它们(如Andrew Thompson所提到的)。


10
让我感到恼火的是,Sun公司花费了很长时间(1.4版本)才承认小写字母与Java常量通用命名方式不符。 - Andrew Thompson

21

实际上没有什么区别,可以看一下 Color 类:

/**
 * The color red.  In the default sRGB space.
 */
public final static Color red       = new Color(255, 0, 0);

/**
 * The color red.  In the default sRGB space.
 * @since 1.4
 */
public final static Color RED = red;

1
Java定义了一些小写的颜色常量名称,这违反了使用大写字母命名常量的规则。以下是红色的代码:
public final static Color red = new Color(255, 0, 0); 

后来他们使用大写字母制作了相同的颜色。
public final static Color RED = red;

所以实际上没有区别。从代码中可以看出它们都是相同的。

public final static Color red = new Color(255, 0, 0);
public final static Color RED = red;

希望这有所帮助!

6
请发布对新问题的答案。这个问题是在2011年提出的,也得到了回答,并标记为被采纳的答案。请阅读新的问题并尽力帮助那些人。干杯。 - Umair Farooq

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