为什么java有很多重复的方法?

Shi*_*ang 13 java duplicates primitive-types

我正在玩Java,因为我打算从C#切换到它以用于跨平台目的.我刚刚注意到它有很多方法可以做同样的事情.我只是想知道他们为什么那样做?

例如,除了构造函数之外,Boolean类还有两个方法执行相同的操作.

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");
Run Code Online (Sandbox Code Playgroud)

我可以通过调用变量本身(b)或方法b.booleanValue()来获取布尔值.有人想要调用一个方法来获取布尔值的布尔值,尽管他可以自己调用变量吗?

有什么意义?

MeB*_*Guy 30

new Boolean(true)和Boolean.valueOf(true)返回Boxed基元...可以在原始布尔值的集合等中使用的真实对象.

Boolean.parseBoolean("true")返回原始布尔值.

顺便说一句,

Boolean b = Boolean.parseBoolean(true);
Boolean b = Boolean.parseBoolean("true");
Run Code Online (Sandbox Code Playgroud)

真的是错误.您正在创建一个原始布尔值,然后自动装箱到布尔值.

您应该使用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");
Run Code Online (Sandbox Code Playgroud)

**不要使用它,因为你只是不必要地创建对象.使用valueOf允许重用现有的Boolean对象.由于布尔是不变的,这很好.


Yea*_*een 5

  1. 有时您需要将字符串解析为原语 Boolean.parseBoolean(*String*)
  2. 有时您需要将String解析为Boolean Boolean.valueOf(*String*)
  3. 有时您不需要创建新对象.最好避免使用new
  4. 有时你需要布尔对象而不是原始对象 Boolean.valueOf(*boolean*)

这些都是不一样的需要.