为什么Java有很多重复方法?

| 我正在使用Java,因为我打算从C#切换到Java,以实现跨平台的目的。我刚刚注意到,它有很多可以完成相同操作的方法。我只想知道他们为什么这样做? 例如,除了构造函数也执行相同的操作之外,布尔类还具有两个执行相同操作的方法。
Boolean b = new Boolean(true);
Boolean b = new Boolean(\"true\");
Boolean b = Boolean.parseBoolean(true);
Boolean b = Boolean.parseBoolean(\"true\");
Boolean b = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(\"true\");
我可以通过仅调用变量本身(b)或方法b.booleanValue()来获得布尔值。任何人都想调用一个获取布尔值的布尔值的方法,尽管他只能调用变量本身吗? 有什么意义呢?     
已邀请:
新的Boolean(true)和Boolean.valueOf(true)返回装箱的基元...可以在基元布尔值的集合等中使用的真实对象。 Boolean.parseBoolean(\“ true \”)返回原始布尔值。 顺便说一句,
Boolean b = Boolean.parseBoolean(true);
Boolean b = Boolean.parseBoolean(\"true\");
真的是错误。您正在创建原始布尔值,然后自动装箱为布尔值。 您应该改用valueOf(true)或valueOf(\“ true \”)。 因此,这些方法的真正用途是
Boolean b = new Boolean(true);   //really this should never be used **
Boolean b = new Boolean(\"true\"); //really this should never be used **
boolean b = Boolean.parseBoolean(true);
boolean b = Boolean.parseBoolean(\"true\");
Boolean b = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(\"true\");
**不要使用它,因为您只是在不必要地创建对象。使用valueOf允许重用现有的布尔对象。由于布尔值是不可变的,所以很好。     
有时您需要将字符串解析为原始
Boolean.parseBoolean(*String*)
有时您需要将String解析为布尔值
Boolean.valueOf(*String*)
有时您不需要创建新对象。最好避免使用
new
有时您需要布尔对象而不是原始的
Boolean.valueOf(*boolean*)
这些不是相同的需求。     
如果您注意到
true
\"true\"
之间的差异,它们并不是真正的重复方法/构造函数。
true
表示Java中的原始类型
boolean
,而\“ true \”表示具有值\“ true \”的
java.lang.String
对象。     
你错过了最有趣的一个
Boolean.getBoolean(\"true\")
    
  有什么意义呢? 好吧,关键是这些替代方案中的一些是有用的,还有一些是Java第一版中遗留的旧方法。 (Java的原始版本匆忙发布,API中存在一些设计错误/不一致。但是,保持向后兼容性的总体要求意味着无法纠正它们。如果错误是肯定的,有害,相关的方法已标记为“已弃用”,以警告程序员不要使用它们。在这种无害的情况下,这些方法只是多余的,情况将保持不变。)     
注意它们是不一样的。您的一行之一:
Boolean b = Boolean.parseBoolean(true);
会给出语法错误(至少根据Java 6 API)。
Boolean.valueOf(true)
new Boolean(true)
是不同的函数,因为
new Boolean(true)
将创建一个新对象,而
Boolean.valueOf(true)
返回一个存储的布尔对象。
Boolean.parseBoolean
的签名返回原始布尔值。在Java 5之前,您需要ѭ19才能将其转换为对象形式。在Java 5之后,系统将自动执行此操作,但是(a)Java决定要使用自动装箱的显式形式(并因此添加
Integer.valueOf
等),并且(b)即使已过时,也永远不会删除Java方法。在许多情况下,它本身就是重复的来源(例如,当它们在Java 2中重新组织了集合,但是旧的集合类中添加了与新系统匹配的方法时,会导致重复)。     
Boolean是从Object继承的一种类型,与b.booleanValue()相反,它返回原始类型boolean。 所以区别是第一个是对象,第二个是基本类型。     
您列出了不存在的一个,并且错误地指定了返回类型
parseBoolean
。该列表实际上是:
Boolean b = new Boolean(true);
Boolean b = new Boolean(\"true\");
boolean b = Boolean.parseBoolean(\"true\");
Boolean b = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(\"true\");
(4)对于(1)是多余的,而(5)对于(2)是多余的。除了两个是构造函数,两个是方法。我怀疑从方法而不是从构造函数获得该功能可能对某些东西(工厂?)有用。 java.lang.Boolean     

要回复问题请先登录注册