【问题标题】:the difference of String.valueOf(char) and +String.valueOf(char) 和 + 的区别
【发布时间】:2012-09-25 15:30:28
【问题描述】:

为了显示 char 的默认值,我写了这样的代码:

public class TestChar {
  static char a;
  public static void main(String[] args) {
    System.out.println("."+String.valueOf(a)+".");
    System.out.println("the default char is "+a);
  }   
}

但控制台输出混乱。第一个是“. .” ,但是第二个是“默认字符是[](像这样,我不知道如何描述它。)”为什么?谢谢帮助

【问题讨论】:

  • 不,我没有看到方括号 [] 作为输出。它只是空的。
  • to Nambari:但我的输出是方形的......当然
  • 您使用的是哪个 IDE?
  • 要获取 char 的值,请尝试将其转换为 int。 System.out.println("."+ (int)a +".");正如其他人所说,该值将为 0(尝试使用 char a = 'A',例如,您将得到 65)
  • 我正在使用 Netbeans,它打印为空。可能与日食有关?你能从命令提示符下运行看看吗?

标签: java string char default-value


【解决方案1】:

正如 user1681360 提到的,您正在打印的是字符 '\0'。您尚未初始化您的字段,因此 Java 为您将其初始化为默认值,不可打印字符 '\0'。根据环境,不可打印的字符会显示为空框、问号等。

在第一行中,您首先创建一个String,然后附加它。在第二行中,运算符String + char 编译为java.lang.StringBuilder#append(char),因此您直接将一个字符附加到缓冲区,而不是创建一个临时的String

事实上,这两种方法总是等价的,即使所讨论的字符是'\0'。字符 '\0' 在 Java 语言规范中有特殊处理,但这不会影响此特定行为。

【讨论】:

    【解决方案2】:

    字符不是字符串。在您的第一个打印语句中,您将 char 转换为字符串,然后打印该值。在第二行中,您只是直接打印 char 的值。

    【讨论】:

    • 但是 + 会将 char 转换为 String。不是吗?
    【解决方案3】:

    你还没有初始化a的值,所以相当于char a = 0;一个不可打印的字符。

    将值初始化为静态字符 a = 'a';这应该会告诉你一些东西。

    更新:由于第二个字符是不可打印的,它显示为一个正方形,但它实际上是一个 '\0' 字符。

    更新2:默认值为0,如数字0,而不是字符'0'。

    【讨论】:

    • 问题是关于字符的默认值。
    猜你喜欢
    • 2011-05-19
    • 2013-03-22
    • 2011-11-25
    • 1970-01-01
    • 2016-08-01
    • 2013-05-24
    • 2012-04-07
    • 1970-01-01
    相关资源
    最近更新 更多