昨天妹妹发来下面这段代码,问[2]处代码为什么输出的是99,不符合预期输出c,且类型也变了。

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会输出什么呢?

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

再啰嗦一句,下面代码输出啥?

char s = 'c'
System.out.println(s++);