一个关于java中"+"的问题,请高手们给予解答,谢谢!

public class Test3 {
public static void main(String[] args) {
char a;
a='*';
System.out.println(a);
int ia=(int)a;
System.out.println(ia);
a+=a;
System.out.println(a);//此处输出的为ASCII码为84的字母T
int b=84;
System.out.println(b);//此处输出84
}

}
我想问一下,a+=a,难道不是先转化为int再进行他们的ASCII相加的吗?应该是42+42=84,转化后a应该也是int类型的,为什么它会输出T,而直接定义的变量b=84为什么会直接输出84呢?谢谢!

a+=a,难道不是先转化为int再进行他们的ASCII相加的吗?应该是42+42=84,转化后a应该也是int类型的,为什么它会输出T

这个问题我面试的时候见过。是这么说的
a+a是先转化为int再进行他们的ASCII相加,
如果a=(a+a);(当然这个通不过编译),那么a是等于84了,可这个语法是错的,你必须强转型为char,像这样a=(char) (a+a);呵呵,可这样一来就不是84而是T了。a+=a;这个也就相当于a=(char) (a+a);了,它是自动转回左值的类型的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-31
a定义的是char 所以按照char输出 b定义的是整形 所以按照整形输出 如果要a输出84 那么进行格式转换 b同理追问

a+=a的过程中,不是在将a转化为int型之后才进行相加的吗?也就是说在做完这个操作后a是不是已经变成int型了呢?

第2个回答  2011-08-31
char类型只有放入到int类型才会转换为int类型,你a并没有放入当int类型中,只是进行运算。
你输出的ia应该是整数

你定义的b就是int类型,所以不可能转换为char型输出。

另外,你的char一旦放入到int类型中就无法自动转换为char类型了追问

a+=a的过程中,不是在将a转化为int型之后才进行相加的吗?也就是说在做完这个操作后a是不是已经变成int型了呢?

追答

你把一个整数放在char类型中(不超过char范围),然后输出,会输出什么呢,是数字还是字符?应该和数值无关,和放入的引用有关。

相似回答