Java中不同类型的连接

Java中不同类型的连接,java,string,casting,formatting,Java,String,Casting,Formatting,我知道,问题很简单。但是我需要完全理解一些小细节(理解背景中发生的事情非常重要)。让我们先看看代码片段。为什么两个连续的“+”符号在这里不会导致错误?或者在这两个“+”之间有一个不可见的0“?在第一种情况下,字符转换为整数的原因是两个连续的“+”号,对吗 public class AppleApp { public static void main(String[] args) { System.out.println("Apple is " + +

我知道,问题很简单。但是我需要完全理解一些小细节(理解背景中发生的事情非常重要)。让我们先看看代码片段。为什么两个连续的“+”符号在这里不会导致错误?或者在这两个“+”之间有一个不可见的0“?在第一种情况下,字符转换为整数的原因是两个连续的“+”号,对吗

public class AppleApp {
    public static void main(String[] args) {
        System.out.println("Apple is " + + '2' + " USD");
        // OUTPUT:   Apple is 50 USD
        System.out.println("Apple is " + + 2 + " USD");
        // OUTPUT:   Apple is 2 USD
    }
}

字符是一个数字,所以把它读作苹果是+(+'2')+“美元”

整数的情况也一样。

“苹果是”++2+“美元”
被“解析”如下:

(“苹果是”+(+2)+“美元”
+2
只是..2.就像
intx=+2;
是合法的,这也是合法的

这同样适用于
++“2”
,因为在java中,字符是数字(即使字符串不是),而“2”是数字
0x32
(字符2的unicode代码)


char
是一种奇怪的类型;它是数字。具体来说,char表示0到65535之间的数字,就像字节是-128到+127一样,short是从-32768到+32767,int是从-2147483648到2147483647

尽管它是一个数字,但所有打印内容的相关方法都将该数字视为unicode值:它们在unicode表中查找数字并显示字符,即:

char c = 65;
System.out.println(c);
打印
A
。这不是因为
char
中固有的任何内容,而是因为
println
方法

在java中,
byte
short
char
都是劣等的:许多操作都不能在它们上面完成,而是首先将它们转换为int。这是因为规范这么说的


因此,
+'A'
是一个类型为
int
的表达式。有点奇怪,但是,spec这么说。因此,
System.out.println(+'A')
打印65,因为它可以计算只打印65的
int
版本的
println
,而不是
System.out.println('A');
调用
字符
版本,打印
'A'

(+2)->+是一元运算符,对吗?和(+'2')->在这里进行正转换(更改)转换为int,对吗?谢谢!int和char之间的转换让我有点困惑。@elvintaghizade14我在这个答案中添加了一堆文本来解释char v int,没有更好的解释了。非常感谢!谢谢!int和char之间的转换让我有点困惑。