为什么toBinaryString不是Integer类中的实例方法?

时间:2011-07-13 11:11:48

标签: java design-patterns

一个简单的设计问题。

示例代码:

    Integer int1 = new Integer(20);     
    System.out.println(Integer.toBinaryString(int1));

为什么JDK设计不像以下那样?那么,toBinaryString函数返回所需的结果吗?

    System.out.println(int1.toBinaryString());

除了静态函数的广泛可用性之外,这种设计方法的其他原因是什么?他们使用任何特定的设计模式吗?如果是,那是哪种模式?

4 个答案:

答案 0 :(得分:15)

这是因为你不能有两个同名的方法,一个静态和一个实例。再次为同一功能设置两个不同的方法名称会让人感到困惑。

使用静态方法似乎更合乎逻辑,因为在这种情况下,您不必在获取其二进制表示之前将int“包装”到Integer中,并且它同时满足两个目的(int的二进制字符串和Integer)。

答案 1 :(得分:9)

您的示例代码会创建Integer的实例,然后将其取消装箱。没有必要:

int int1 = 20;
String binary = Integer.toBinaryString(int1);

如果它是一个实例方法,你将强制创建一个Integer实例,仅将int转换为二进制表示,这会很烦人

换句话说:避免不必要地创建对象。

答案 2 :(得分:6)

当添加此方法时,在JDK1.0.2中,没有自动装箱,并且JVM比现在慢得多。我想,使用这个静态方法可以轻松地将int和Integer转换为二进制字符串,而无需为了将int转换为二进制而创建新的Integer实例。

答案 3 :(得分:0)

int,char,double ...这些是默认数据类型,这些不是对象。方法应该是Object not datatype的一部分。

这种静态方法比实例方法更有效。