当前位置: 技术问答>java相关
有没有见过这么莫名其妙的问题啊?
来源: 互联网 发布时间:2015-03-05
本文导语: public class Llandaff{ public static void main(String argv[]){ Llandaff h = new Llandaff(); h.go(); } public void go(){ char c = 'c'; int i = 10; String s = "Hello"; c=c+i; //就是这句 s+=i; } } 这个程序编译不通...
public class Llandaff{
public static void main(String argv[]){
Llandaff h = new Llandaff();
h.go();
}
public void go(){
char c = 'c';
int i = 10;
String s = "Hello";
c=c+i; //就是这句
s+=i;
}
}
这个程序编译不通过,报错为可能存在的精度损失,发现int,需要char.
可是只要把带注释那句话改成c+=i;编译通过
我头都晕了,怎么回事啊?c+=i不就是c=c+i吗?怎么结果会不一样的啊?
public static void main(String argv[]){
Llandaff h = new Llandaff();
h.go();
}
public void go(){
char c = 'c';
int i = 10;
String s = "Hello";
c=c+i; //就是这句
s+=i;
}
}
这个程序编译不通过,报错为可能存在的精度损失,发现int,需要char.
可是只要把带注释那句话改成c+=i;编译通过
我头都晕了,怎么回事啊?c+=i不就是c=c+i吗?怎么结果会不一样的啊?
|
It is different
to += action , java will convert the data implicitly from char to int ,
while c = c + j means char = int , it is not permitted .
to += action , java will convert the data implicitly from char to int ,
while c = c + j means char = int , it is not permitted .
|
int i = 0x0000ffff;
c += i;
System.out.println((int)c+" "+c);
结果是:
98 b
16char ->32 和 32int 相加 -> 16char
c += i;
System.out.println((int)c+" "+c);
结果是:
98 b
16char ->32 和 32int 相加 -> 16char
|
1. c+i