【问题标题】:Is converting int to a String counted as Autoboxing?将 int 转换为 String 算作自动装箱吗?
【发布时间】:2013-08-01 06:52:27
【问题描述】:

AFAIK 当 Java 自动将原始类型转换为包装类对象时,它称为自动装箱,因为原始类型被装箱到包装类中。

原来如此

int test = 3;
String str = String.valueOf(test);

算作自动装箱吗?

问的理由?

我最近遇到了this 的问题。我认为的原因是在 java 5 中引入的自动装箱(Java 4 中不存在)。

【问题讨论】:

    标签: java autoboxing string-interning


    【解决方案1】:

    没有。自动装箱仅适用于原语 -> 包装器。由于没有 String 原语(或包装器),因此 String 与自动装箱无关。

    【讨论】:

      【解决方案2】:

      Autoboxing 是原语到其相应包装器的自动转换。 int 是一个原语,String 不是一个包装器。

      【讨论】:

        【解决方案3】:

        根据http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html,自动装箱是Java编译器在原始类型与其对应的对象包装类之间进行的自动转换,String不是对象包装类。

        【讨论】:

          【解决方案4】:

          仅当引用类型和原语之间存在“阻抗不匹配”时才会自动装箱

          No.
          

          如果我们用int参数查看valueOf方法的源代码

           public static String More ...valueOf(int i) {
                return Integer.toString(i, 10);
           }
          

          Integer wrapper 上调用 ToString

          在整数包装器toString() 中创建一个新字符串

            public static String More ...toString(int i, int radix) {
          
                 if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
                      radix = 10;
          
                 /* Use the faster version */
                   if (radix == 10) {
                      return toString(i);
                  }
          
                 char buf[] = new char[33];
                 boolean negative = (i < 0);
                int charPos = 32;
          
                 if (!negative) {
                      i = -i;
                  }
          
                  while (i <= -radix) {
                      buf[charPos--] = digits[-(i % radix)];
                     i = i / radix;
                   }
                  buf[charPos] = digits[-i];
                  if (negative) {
                       buf[--charPos] = '-';
                  }
          
                   return new String(buf, charPos, (33 - charPos));
               }
          

          【讨论】:

            【解决方案5】:

            不,这不会被视为自动装箱。自动装箱介于原始和包装类之间。 请参考:http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

            来自文档:

            将原始值(例如 int)转换为相应包装类(Integer)的对象称为自动装箱。 Java 编译器在原始值为以下时应用自动装箱:

            • 作为参数传递给需要相应包装类的对象的方法。
            • 分配给相应包装类的变量。

            【讨论】:

              【解决方案6】:

              不,这不是自动装箱。

              我认为原因是在 java 5 中引入的自动装箱(Java 4 中不存在)。

              你的逻辑是错误的。

              您链接到的问题是关于 Java 1.4.x 和 Java 1.5 之间 String.valueOf(int) 的更改行为。 Java 1.5 中还添加了自动装箱功能。然而,推断这两件事有任何联系是不合逻辑的。

              另外,这不是字符串实习的例子。 String.valueOf(int) 没有在 Java 1.5 或 Java 1.4.x 中实习字符串。 (在 Java 1.4.x 的情况下,对于某些输入,该方法确实返回了之前被实习过的字符串,但这只是因为它们是字符串文字。)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-02-27
                • 2011-03-05
                相关资源
                最近更新 更多