java中双引号和单引号之间的奇怪行为

java中双引号和单引号之间的奇怪行为,java,Java,只是比较了不同语言和java(java 8)中的一些行为,我尝试了一些东西,得到了奇怪的结果: 在这里,我迭代一个小字符串数组,并显示迭代器和值(没有什么特别的,我们同意…)。但是,当我更改单引号“”和双引号“”之间的sysout连接时,行为完全不同。 1-显示迭代的最终结果(当我在循环中递增时为3),它似乎从上一次迭代计算+1,因此在这种情况下,最终结果是: 33Foo 34巴 35Baz publicstaticvoidmain(字符串[]args){ int y=0; 字符串[]arr={

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

在这里,我迭代一个小字符串数组,并显示迭代器和值(没有什么特别的,我们同意…)。但是,当我更改单引号“”和双引号“”之间的sysout连接时,行为完全不同。 1-显示迭代的最终结果(当我在循环中递增时为3),它似乎从上一次迭代计算+1,因此在这种情况下,最终结果是:

33Foo 34巴 35Baz

publicstaticvoidmain(字符串[]args){
int y=0;
字符串[]arr={“Foo”,“Bar”,“Baz”};
对于(int i=0;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]);
    }

}
publicstaticvoidmain(字符串[]args){
int y=0;
字符串[]arr={“Foo”,“Bar”,“Baz”};
对于(int i=0;i
将产生预期的结果:

一福 2巴 3巴兹


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

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

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

1 + ' ' == 33; 

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

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

1 + ' ' == 33; 

我认为现在发生的是Java将空间视为ASCII数,并添加实际数组的索引值。这是因为Java允许类型转换。因此,当您将一个数字连接到例如“”时,它实际上将其视为一个加法操作,而不是连接

那么比如说,

  • 33 Foo实际上是32+1 34
  • 酒吧实际上是32+2
  • 35巴兹实际上是 32+3

  • 我认为现在发生的是Java将空间视为其ASCII数,并添加实际数组的索引值。这是因为Java允许类型转换。因此,当您将一个数字连接到例如“”时,它实际上将其视为一个加法操作,而不是连接

    那么比如说,

  • 33 Foo实际上是32+1 34
  • 酒吧实际上是32+2
  • 35巴兹实际上是 32+3

  • 好的,但是它取迭代的最终结果,即3,然后从那里迭代,所以3,4,5,因为最终结果是33Foo,然后是34Bar,然后是35Baz,你明白我的意思吗?它不取迭代的最终结果。1+space=33,2+space=34,3+space=35。好的,我看到它使用ascii值…所以第一个问题的答案非常感谢:)但是为什么它不迭代并给出最后一个值呢?@kickdev您从
    y=0
    开始,然后执行
    y++
    。现在
    y
    1
    1+32(32是字符
    ''
    的值)是33
    33+arr[0]
    =
    33Foo
    等等。@kickdev它不迭代是什么意思?它打印三行,但是它取迭代的最终结果,即3,然后从那里迭代,所以3,4,5,因为最终结果是33Foo,然后是34Bar,然后是35Baz,你明白我的意思吗?它不取迭代的最终结果。1+space=33,2+space=34,3+space=35。好的,我看到它使用ascii值…所以第一个问题的答案非常感谢:)但是为什么它不迭代并给出最后一个值呢?@kickdev您从
    y=0
    开始,然后执行
    y++
    。现在
    y
    1
    1+32(32是字符
    ''
    的值)是33
    33+arr[0]
    =
    33Foo
    等等。@kickdev它不迭代是什么意思?它打印三行。