java强制类型转换问题
小弟对这里有点不明白请高手解答下,谢谢charx;x=x-32;//errorx-=32;//right这个事什么原因啊,为什么上面那个就提示数据类型错误呢...
小弟对这里有点不明白请高手解答下,谢谢
char x;
x=x-32;//error
x-=32;//right
这个事什么原因啊,为什么上面那个就提示数据类型错误呢 展开
char x;
x=x-32;//error
x-=32;//right
这个事什么原因啊,为什么上面那个就提示数据类型错误呢 展开
7个回答
展开全部
x-=32; // 包含了一个隐藏的转型!
x=x-32;却没有隐藏的转型,需要自己强制转换,整数默认是int型的
这个问题在《java解惑》一书的谜题9中有详细解释
现在该轮到你来写些代码了,好消息是,你只需为这个谜题编写两行代码,并为下一个谜题也编写两行代码。这有什么难的呢?我们给出一个对变量x和i的声明即可,它肯定是一个合法的语句:
x += i;
但是,它并不是:
x = x + i;
许多程序员都会认为该迷题中的第一个表达式(x += i)只是第二个表达式(x = x + i)的简写方式。但是这并不十分准确。这两个表达式都被称为赋值表达式。第二条语句使用的是简单赋值操作符(=),而第一条语句使用的是复合赋值操作符。(复合赋值操作符包括 +=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、^=和|=)Java语言规范中讲到,复合赋值 E1 op= E2等价于简单赋值E1 = (T)((E1)op(E2)),其中T是E1的类型,除非E1只被计算一次。
换句话说,复合赋值表达式自动地将它们所执行的计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原始类型转换。因此,我们有很好的理由去解释为什么在尝试着执行等价的简单赋值可能会产生一个编译错误。
——摘自《java解惑》
x=x-32;却没有隐藏的转型,需要自己强制转换,整数默认是int型的
这个问题在《java解惑》一书的谜题9中有详细解释
现在该轮到你来写些代码了,好消息是,你只需为这个谜题编写两行代码,并为下一个谜题也编写两行代码。这有什么难的呢?我们给出一个对变量x和i的声明即可,它肯定是一个合法的语句:
x += i;
但是,它并不是:
x = x + i;
许多程序员都会认为该迷题中的第一个表达式(x += i)只是第二个表达式(x = x + i)的简写方式。但是这并不十分准确。这两个表达式都被称为赋值表达式。第二条语句使用的是简单赋值操作符(=),而第一条语句使用的是复合赋值操作符。(复合赋值操作符包括 +=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、^=和|=)Java语言规范中讲到,复合赋值 E1 op= E2等价于简单赋值E1 = (T)((E1)op(E2)),其中T是E1的类型,除非E1只被计算一次。
换句话说,复合赋值表达式自动地将它们所执行的计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原始类型转换。因此,我们有很好的理由去解释为什么在尝试着执行等价的简单赋值可能会产生一个编译错误。
——摘自《java解惑》
展开全部
System.out.println("摄氏温度"+(char)x+"°,转换为华氏温度为:"+(char)y)
这句代码中,为什么要要进行char的造型呢?依然使用double就可以了。
这句代码中,为什么要要进行char的造型呢?依然使用double就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
double
x,y;
x=37.5;
y=1.8*x+
(double)
32;
//多余的黑色部分,因为1.8已经是double类型了。
System.out.println("摄氏温度"+
(char)
x+"°,转换为华氏温度为:"+
(char)
y)
//不要黑色的部分(你没有必要强制转换成字符类型啊!
x,y;
x=37.5;
y=1.8*x+
(double)
32;
//多余的黑色部分,因为1.8已经是double类型了。
System.out.println("摄氏温度"+
(char)
x+"°,转换为华氏温度为:"+
(char)
y)
//不要黑色的部分(你没有必要强制转换成字符类型啊!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1:
y=1.8*x+
(double)
32;
32
是INT的类型
可是当加上
1.8*X
就变成DOUBLE类型了
,
说以(DOUBLE)32
是多余的。
2.
当你在用到
System.out.
println
时候
。
(Char)X
,
(Char)
Y
是字符类型
它返回的是以
基于原始的
Unicode
规范(
请阅读JAVA
API
)
在这里完全没有必要用到。
希望对你有帮助!
y=1.8*x+
(double)
32;
32
是INT的类型
可是当加上
1.8*X
就变成DOUBLE类型了
,
说以(DOUBLE)32
是多余的。
2.
当你在用到
System.out.
println
时候
。
(Char)X
,
(Char)
Y
是字符类型
它返回的是以
基于原始的
Unicode
规范(
请阅读JAVA
API
)
在这里完全没有必要用到。
希望对你有帮助!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
x=x-32; x-32的结果是一个int型,x是char型,int型不能隐式转换成char型
x-=32; 记住x减32的结果不会转换类型就行
x-=32; 记住x减32的结果不会转换类型就行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询