Java中的char类型
> 昨天妹妹发来下面这段代码,问[2]处代码为什么输出的是99,不符合预期输出c,且类型也变了。
```java
public class Test {
public static void main(String[] args) {
char[] array = new char[] { 'a', 'b', 'c' };
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
char s = array[2];
System.out.println(s); //[1]
System.out.println(+s);//[2]
}
}
```
通过分析,此处的﹢号既不是字符串的连接符,也不是算数加法运算符号,而是作为单目运算符正号。既然如此,再做尝试```System.out.println(-s);```得到输出 **-99**,符合上述分析。
char类型再做算数运算操作时,会转为对应ASCII值进行计算,此处加了正负号,所以转为了int类型,通过IDE进入println方法,调用的是int类型参数方法也侧面说明该问题。
### 扩展
> ++s会输出什么呢?
```java
public class Test {
public static void main(String[] args) {
char[] array = new char[] { 'a', 'b', 'c' };
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
char s = array[2];
System.out.println(s);
System.out.println(+s);
System.out.println(++s);
}
}
```
答案是 **d**
不应该输出100吗?
++运算符是自加1运算符,先将s加1,此处s被转为对应ASCII值99,运算结果100。然后将100赋值给char类型的s变量,又从100变到了d
> 再啰嗦一句,下面代码输出啥?
```java
char s = 'c'
System.out.println(s++);
```