【问题标题】:Core java printing statement核心java打印语句
【发布时间】:2015-09-13 06:35:56
【问题描述】:

为什么java编译器会给出

100a

当我尝试打印 System.out.println('2'+'2'+"a") 和时作为输出

a22

System.out.println("a"+'2'+'2')。请详细说明。谢谢)

【问题讨论】:

  • '2'50 作为 int 值。添加chars 时,将扩大到int
  • 在java中没有“sysout”之类的东西!
  • @GyroGearless 你当然可以原谅他的速记。他清楚地知道这一点,因为他的文本实际上正在打印......
  • @GyroGearless 我很抱歉这种混乱。谢谢杰西·谢拉巴加。我只是简写 java 中的 print 语句。
  • @jagaDsh Shorthand 不适用于编译器,在这里也不起作用。

标签: java core println


【解决方案1】:

Java 使用 Unicode 来表示字符。

在 System.out.println('2'+'2'+"a") 中,第一个操作数是 char '2',它的 Unicode(ASCII) 值是 50。所以它加起来是 100,然后连接起来使用字符串文字“a”。所以输出是100a

在System.out.println("a"+'2'+'2')中,由于第一个操作数是String字面量,所以被认为是String拼接,因此输出为a22。

【讨论】:

    【解决方案2】:

    编译器会显式地将您的“2”转换为 int 值并将其与最后一个 String 连接。请改用此代码;

    系统。 out.println("2"+"2"+"a");

    【讨论】:

      【解决方案3】:

      注意:
      单引号:char,
      双引号:字符串

      如果您首先使用单引号和数学运算符而不在单引号之前使用字符串。然后,编译器使用它们的 ascii 值。

      例如:

      '2'+'2' = 100
      "2"+'2' +"a"= 22a

      'a'+'a' = 194
      "a" +"a" = aa

      'a' +'2' = 147
      "a" + '2' = a2

      【讨论】:

        【解决方案4】:

        在 '' 中输入的文本标记为 char 和 "" 标记为 String。

        2 的 ASCII 值为 50 (http://ascii.cl/index.htm?content=mobile)

        • 操作员总是从左到右操作

        这里 'a' 将被视为 int 并考虑其 ASCII 值。

        • 运算符还可以根据关联性充当串联,例如 3+4+"a" = 7a 和 "a"+3+4 = a34

        因此'2'+'2+'a' = 100a

        【讨论】:

          【解决方案5】:
          System.out.println('2'+'2'+"a");
          

          这里 2 代表 char 值,因为它在单引号内...所以您传递的 '2' 的值是 50,所以它只需添加两个值 (50+50=100),所以它在附加 100 ('2'+'2') 的位置..然后这里的 a 是字符串,因为您是使用双引号创建的,所以它只是将 a 附加到 ('2'+'2') 的值之后...还要注意,如果你给出的东西在双引号内,它会按原样打印......所以输出是 100a

          System.out.println("a"+'2'+'2');
          

          这里它执行字符串连接,因为第一个操作数是字符串......所以你得到那个 a22..注意,在任何字符串操作数之后,如果你给出任何整数或 char 值,它只会把它当作字符串......

          在第一个语句中,您的第一个操作数是 char,因此添加了两个 char 值,然后它执行字符串连接,但在第二个语句中,您的第一个操作数本身是字符串,所以这就是这两者之间的差异。

          希望你现在明白了

          【讨论】:

            【解决方案6】:

            https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

            在这里您将获得 ASCII 值。 在'2'+'2'+a中,从左到右读取字符2的ASCII值是50,由于单引号,所以结果变成100a。 而在第二种情况下 System.out.println("a"+'2'+'2'),a 是一个字符串(双引号),所以它包含字符串,结果变成 a22。

            System.out.println('a'+'2'+'2'); 的结果是 197 :)

            【讨论】:

              【解决方案7】:

              如果您这样做System.out.println('2'+'2'+"a"),这将简单地附加 2 的 ascii 值,即 50,因为它在单引号中,将其视为一个字符,两次变为 100,最后在结束所以变成100a。这里要考虑的是参数以 char 值开头。

              如果你这样做System.out.println("a"+'2'+'2')它只会将'2'两次附加到“a”,因为它以String开头,'+'将在这里作为连接运算符工作,所以最终a22

              【讨论】:

                【解决方案8】:

                这里你必须明白两件事。

                + 运算符与至少一个字符串一起使用时,结果将是字符串。如果两者都是数字,则结果将是数字(多态)。

                另一件事是,双引号表示字符串,而单引号表示字符(内部表示 ASCII int 值)。 希望这会有所帮助

                【讨论】:

                • System.out.println('2'+'2'+"a") 给你 100a,根据你的解释应该是 ""22a"。所以 +operator 检查来自 L2R 的第一个操作数和决定执行什么。
                • @ZygoteInit 请注意,在表达式 '2'+'2' 中,两者都不是字符串。事实上,它是一个简单的整数加法,其中“2”代表 ASCII 值 50。
                【解决方案9】:

                尝试一下

                sysoutln(""+'2'+'2'+"a");
                

                然后你可以看到22a。 当表达式中出现第一个字符串时,剩余的将附加字符串。这意味着 + 被视为串联操作。在表达式中出现字符串之前,那将作为它自己的踢

                【讨论】:

                  【解决方案10】:

                  '2' 是一个字符,因此 '2' + '2' 将该字符的 int 值添加到自身 (50+50) 上,然后将“a”附加到它上面,得到 100a。

                  "a" + '2' + '2' 执行字符串连接,因为第一个操作数是字符串。因此你得到a22。

                  请注意,表达式是从左到右计算的,因此前两个操作数的类型决定 + 是执行 int 加法还是 String 连接。

                  【讨论】:

                  • 完美。这就是我所期望的......谢谢
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-06-20
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-11-03
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多