【问题标题】:Why use " " and not ' ' for outputting a blank? [duplicate]为什么使用 "" 而不是 ' ' 来输出空白? [复制]
【发布时间】:2019-06-20 21:44:37
【问题描述】:

您是否有任何理由希望在 Java(任何版本)中使用“”而不是 '' 来输出空格?

在 Mark Allen Weiss 的 “Data Structures and Problem Solving Using Java (4th Edition)” 中,它说不使用 " " 而不是 ' ' 是一个常见错误:即我们应该使用“”。

据我所知,两者没有区别。

尝试:

System.out.println("a b c" + ' ' + "d e f");
System.out.println("a b c" + " " + "d e f");

输出似乎没有区别。

【问题讨论】:

  • 这取决于你需要一个字符串还是一个字符。
  • 我的错误,在此之前在 Python 中工作,忘记了与两种引号类型相关的 'char' 和 "String" 差异。但是,我仍然相信,如果你只是加入两个字符串,它应该不会有什么不同。

标签: java


【解决方案1】:

如果你的例子可能没有效果。但是,在某些情况下它很重要。

char 是一个整数类型,并且

System.out.println(1 + ' ' + 2); //output: 35 because 1 + 32 + 2 

产生与

不同的结果
System.out.println(1 + " " + 2); //output: 1 2

所以你应该确保你知道' '" "之间的区别。

我想书中建议的上下文可以说明它所谈论的情况。

【讨论】:

  • 稍后只是举了一个例子:)我现在明白了,谢谢!
【解决方案2】:

这是因为+运算符在Java中有两种含义

  1. 连接如果至少一个操作数是像Str + ...... + Str这样的字符串
  2. 加法如果两个操作数都是数字类型
    • 除布尔值外的所有原语(Java 中没有 truefalse 不等同于 10),
      但包括char,其数值是Unicode表中字符的位置,如'A'65,空格' '32
    • 数字基元类型(如 Integer、Double)的包装类

所以如果你有num + Str 运算符+ 将代表连接,你会得到字符串。

但在num + char 的情况下,运算符+ 将表示加法,并将返回数值,如System.out.println(1+' ') 将被视为1+32,因此33 将被打印。

因此,如果您将" "+ 一起使用,则可以保证它是串联,而+' ' 的含义将取决于第二个参数。

【讨论】:

    【解决方案3】:

    我们对文字字符使用单引号,对文字字符串使用双引号。所以你要把它们和这个一起添加:

    System.out.println("a b c" + ' ' + "d e f");
    

    但其中没有错误。您可以使用“”或''输出空格。

    【讨论】:

    • "您可以使用 " " 或 ' ' 输出空格" 并非总是如此,请参阅此答案 stackoverflow.com/a/56694399 以查看使用 @ 时显示输出差异的案例987654323@ 与 ' '.
    【解决方案4】:

    Java 书籍告诉您双引号优于单引号的原因是 ' 'char,而 " "String。这是内置的 java 行为。 char 是一个 java 原语,类似于 intfloatString 是提供的对象类型,而不是原始类型。当您将" " 放入代码中时,java 会将其解释为java.lang.String 的实例。

    您是对的,但它在您的示例中没有实际效果。这是因为当您连接字符串和字符时,java 会自动将整个内容转换为字符串(+ 运算符会这样做)。您也可以通过这种方式连接其他原语。

    但是,这些在 Java 中实际上是完全不同的,您可以通过一个简单的测试来证明这一点:

    @Test
    public void testCharVsString(){
        assertTrue(" ".equals(' '));
    }
    

    上述测试将失败,因为这两个对象不相同。

    作为一般规则,在表示字符时坚持使用Strings 是可以的。 char 对于更高级的编码任务很有用。

    【讨论】:

    • 我不得不恭敬地不同意你的最后一段。在打印特定字符时坚持使用String 可能会很好,但我不鼓励人们在算法或业务逻辑中使用String 来表示单个字符。
    • 同意 :) 我可能应该说“可能有多个字符”。我想让新编码人员可以使用该语言。但你当然是绝对正确的——这就是我暗示“更高级的编码任务”的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    相关资源
    最近更新 更多