【问题标题】:Weird behaviour between double quote and single quote in java [duplicate]java中双引号和单引号之间的奇怪行为[重复]
【发布时间】:2020-06-25 08:55:49
【问题描述】:

只是比较不同语言和 java (java 8) 中的一些行为,我尝试了一些东西,但得到了奇怪的结果:

在这里,我迭代了一个小的 String 数组,并将迭代器与值一起显示(没什么花哨的,我们同意...)。但是,当我更改单引号 ' ' 和双引号 "" 之间的 sysout 连接时,行为完全不同。 1- 显示迭代的最终结果(当我在循环中递增时为 3),它似乎从最后一次迭代计算 + 1,所以在这种情况下,最终结果是:

33Foo 34巴 35巴兹

public static void main(String[] args) {

    int y = 0;
    
    String[] arr= {"Foo", "Bar", "Baz"};    
    for(int i = 0; i < arr.length; i++) {
    
        y++;
        System.out.println(y +' '+ arr[i]);
    }

}

同时将上面的内容改为双引号:

 public static void main(String[] args) {

    int y = 0;
    
    String[] arr= {"Foo", "Bar", "Baz"};    
    for(int i = 0; i < arr.length; i++) {
    
        y++;
        System.out.println(y +" "+ arr[i]);
    }

}

会有预期的结果:

1 富 2 酒吧 3巴兹

有人知道为什么吗?只是想知道使用单引号和双引号造成影响的原因...

【问题讨论】:

    标签: java


    【解决方案1】:

    单引号用于char 类型。由于这是一个数字类型,所以执行int + char 将产生一个int 值。

    空格字符 (' ') 的数值为 32,因此:

    1 + ' ' == 33; 
    

    【讨论】:

    • 好的,但是它需要迭代的最终结果,即 3 并从那里迭代 3,4,5 因为最终结果是 33Foo 然后 34Bar 然后 35Baz,你明白我的意思吗?跨度>
    • 不取迭代的最终结果。 1 + 空间 = 33, 2 + 空间 = 34, 3 + 空间 = 35。
    • 好的,我看到它需要 ascii 值...所以第一个问题得到了解答,非常感谢 :) 但它为什么不迭代并给出最后一个值呢?
    • @kicksdev 你从y=0开始,然后是y++。现在y11 + 32(32 是 char ' ' 的值)是 33。33 + arr[0] = 33Foo 等等。
    • @kicksdev 你是什么意思它不迭代?它打印三行。
    【解决方案2】:

    我认为正在发生的事情是 Java 将空格视为其 ASCII 数字并添加实际数组的索引值。这是因为 Java 允许类型转换。因此,当您将数字与 say ' ' 连接时,它实际上将它们视为添加操作而不是连接。

    例如,

    1. 33 Foo 实际上是 32+1 34
    2. Bar 实际上是 32+2
    3. 35 Baz 实际上是 32+3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 2012-04-07
      • 2011-10-25
      • 2012-04-15
      • 2010-10-08
      相关资源
      最近更新 更多