为什么要使用“”而不是“”来输出空白?

时间:2019-06-20 21:44:37

标签: java

您是否有任何理由要使用Java而不是使用“”而不是''(任何版本)输出空白?

在Mark Allen Weiss撰写的“使用Java进行数据结构和问题解决(第四版)” 中,它说不使用“”而不是''是一个常见的错误:即我们应该使用“”。

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

尝试:

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

输出似乎没有差异。

4 个答案:

答案 0 :(得分:4)

以您的示例为例,可能没有效果。但是,在某些情况下,它很重要。

char是整数类型,并且

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

产生与

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

因此,您应该确保知道' '" "之间的区别。

我想这本书中建议的内容可以说明它在谈论什么情况。

答案 1 :(得分:1)

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

  1. 串联,如果至少一个操作数是字符串,例如Str + ...... + Str
  2. 加法(如果两个操作数都是数字类型):
    • 除布尔值(Java truefalse中的no都不等同于10的所有原语),
      但包括char的数字是65,而数字32是Unicode表中字符位置的数字,'A'是{{3}}。
    • 用于数字基本类型(例如Integer,Double)的包装器类

因此,如果您拥有' '运算符num + Str将表示串联,并且您将获得String。

但是对于+运算符,num + char将表示加成,并且将返回类似+的数值,将被视为System.out.println(1+' '),因此{ {1}}将被打印。

因此,如果将1+3233一起使用,则可以保证它是 concatenation ,而" "+的含义将取决于第二个论点。

答案 2 :(得分:0)

对于文字字符,我们使用单引号,而对于文字字符串,则使用双引号。因此,您将与此添加在一起:

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

,但是没有错误。您可以使用“”或“”来输出空格。

答案 3 :(得分:0)

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

您是对的,尽管它在您的示例中没有实际作用。这是因为当您连接字符串和字符时,java会自动将整个内容转换为字符串(+运算符会执行此操作)。您还可以通过这种方式串联其他基元。

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

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

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

通常,在代表字符时可以坚持使用Stringchar对于更高级的编码任务很有用。