【问题标题】:Is assigning variables directly to a wrapper class a good practice in Java?将变量直接分配给包装类是 Java 中的一种好习惯吗?
【发布时间】:2015-10-29 13:22:18
【问题描述】:

随着我慢慢学习 Java 教程,我遇到了 Java 辅助类。代码是

public static void main(String args[]) {
char myLittleChar = 'b';
char myBigChar = Character.toUpperCase(myLittleChar);
System.out.println(myBigChar);

但是,即使直接分配给辅助类,它的工作原理也是一样的。

Character c = 'a';
System.out.println(c.toUpperCase(c));

同样适用于short或float。

但是,我在任何教程或任何示例代码中都没有遇到过这种情况,并且被声明为intshort 等。这是否被认为是一种不好的做法?如果有,为什么?

谢谢。

【问题讨论】:

  • 当您谈到Helper classes 时,我假设您指的是原语的包装类。使用它们本身并不坏,但您应该知道您是通过autoboxing 创建对象(即使您不调用显式构造函数)。由于这通常会对性能造成很大影响,因此应尽量避免。
  • c.toUpperCase(c) 是一种不好的做法,因为它是对静态方法的调用,并且必须在 Class 而不是实例上完成!
  • @Turing85 我关注的视频教程是Helper class,而不是wrapper class,因此我不知道并且不确定哪个是正确的术语。性能部分是有道理的。感谢您的友好解释。
  • @rlm 感谢您的友好解释。我一直在寻找理解为什么是不好的做法的原因。我想,正如 Turing85 所说,这是对性能的影响。
  • 我们说的不是同一件事:图灵说的是用'char'代替'Character',我说的是用实例调用静态方法……看这个线程演示我说的是:stackoverflow.com/questions/7884004/…

标签: java class helper


【解决方案1】:

Character 将原始的两字节 char 包装在一个对象中。那是多余的。 你可以写

char myBigChar = Character.toUpperCase('b');

所以这是效率问题。

顺便说一句,String 已经是一个对象,并且没有这种冗长。

【讨论】:

    【解决方案2】:

    如果我理解您的要求,您想知道实用程序 ot 包装器 Object 类与它们的原始对应物。

    包装类有很多优点:

    • 它们可以用作泛型类型
    • 它们可以为空
    • 它们在封装的原始值和其他静态方法上提供实用方法

    在您的问题的另一方面,有一个概念称为装箱/拆箱。

    当您:Character c = 'a'; 时,您自动装箱原始值 'a' 到其包装器 Character 类中。

    如果您使用类似char a = c; 的内容执行该分配,您会自动将包装器的值拆箱到其原始对应项中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 2016-07-30
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多