java - String.valueOf(char) 和 + 的区别

标签 java string char default-value

为了显示 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);
  }   
}

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

最佳答案

如 user1681360 所述,它是您正在打印的字符 '\0'。您还没有初始化您的字段,所以 Java 为您将它初始化为默认值,不可打印的字符 '\0'。根据环境的不同,不可打印的字符会显示为空框、问号等。

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

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

关于java - String.valueOf(char) 和 + 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12586248/

相关文章:

c - C 查找某个字符在字符串中出现的次数

java - Java 中无法将 int 转换为 string

java - 如何为 findBy Join 表列制定 JPA 方法

java - Maven 将项目打包为具有依赖项的可执行 JAR

java - 将多个字符串的不同子字符串添加到 Treeset

c - gcc 警告赋值使指针来自整数而不进行强制转换

java - 在 Java 计算器的按钮按下时获得声音的最佳方法?

java - 警告所选目录不是有效的 tomcat 主目录

c# - 解析大型 xml 文件以在元素之间添加新行真的很慢

java - 获取 TreeMap 中 String 键以模式开头的值