黑马程序员技术交流社区
标题:
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
[打印本页]
作者:
郭炜
时间:
2012-3-14 11:27
标题:
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
作者:
王思兰
时间:
2012-3-14 11:30
s1=s1+1,s是short,占2个字节,1是int类型,占4个字节,这2个相加让s也转换成int类型了,不能赋给等式左边的short类型的变量s;
s1+=1;这个只做赋值运算,不会转换类型,自加本身会自动转换。
作者:
赵孟恩
时间:
2012-3-14 11:35
第一个有错 s1是short 类型 , 1是int类型, s1+1运算结果是int类型 ,int转为short要加强制转换 s1 =(short)(s1+1)
第二个没错 += 是赋值运算符 没有类型转换 直接把(s1+1)赋值给s1 这是一个赋值运算
作者:
潘许超
时间:
2012-3-14 11:46
第一种没有进行类型的转换都是short类型,但是第二种,在进行+1的时候s1进行类一次类型的提升转变为int类型,然后在赋值给short类型的时候肯定会报错,毕老师在视频中说过这个例子
作者:
施俊
时间:
2012-3-14 11:55
前一个问题是:s1类型为short型,1为int型,=右边s1与1做运算,s1向上提升为int型,运算后赋给左边的short型,java是强类型语言,不能赋值,所以错误。
后一个问题是:+=是一个运算符,并不完全等于做加1运算,相当于在s1的类型基础上加1,并不涉及类型提升问题。
作者:
吴华二
时间:
2012-3-14 15:57
其实这就是基本数据类型的相互转换,s1是short类型,1是int类型。当两个数据相加以后是一个int类型,然后赋值给一个short类型是不行的。要赋值给short类型,得在算式后面加上强制转换符号(short),理解一点:低级数据类型隐式转换成高级数据类型(s1+1),相反,高级数据类型转换成低级数据类型时得加要相应的强制转换符(short)(s1+1)。
作者:
冯建鹏
时间:
2012-3-15 02:25
short s1 = 1; s1 = s1 + 1;有什么错? 类型转换问题:因为s1是short类型的占2个字节, s1=s1+1 java默认数字都是int类型的。int类型占4个字节,将4个字节放入到2个字节里面有可能会发生精度损失,就像毕老师说的一个2俩的碗,装4俩的饭有可能承不下,会溢出。需要把1强制转换为short类型的,在1前面加上(short)也就等于是s1=s1+(short)1;
short s1 = 1; s1 += 1;有什么错?这句没错。。。+=是一个运算符,毕老师说这个字符可以理解为s1=(short)(s1+1) //s1+1虽然已经自动提示为int类型,但是前面加了强制转换。
作者:
李飞
时间:
2012-3-15 14:31
从低精度向高精度的顺序为:
byte 、short、int、long、float、double、char
当算术运算的时候,低精度会自动的向高精度转换,
而高精度是不会自动向高精度转换的,因为可能会丢失数据或是影响精确度。
作者:
刘_浩
时间:
2012-3-16 00:54
标题:
RE: short s1 = 1; s1 = s1 1;有什么错? short s1 = 1; s1 = 1;有什么错?
s =1.s=s 1。第三个s是short形的而后面1是Int形的,所以第三个S自动提升为int形的。即(s十1)为int。而S十1赋给左边的s,.而这个S却是short的。s =1.却没有提升。
作者:
邓飞飞
时间:
2012-3-16 11:21
liuhao411 发表于 2012-3-16 00:54
s =1.s=s 1。第三个s是short形的而后面1是Int形的,所以第三个S自动提升为int形的。即(s十1)为int。而S十 ...
在程序
public class FuZhi
{
public static void main(String args[])
{
short s1=1;
s1=s1+1;
System.out.println("s1="+s1);
}
}
这个程序的错误是你定义的s1是short类型的占两个字节,二在s1=s1+1中由于整数1在java中默认是int类型占四个字节,所以在(s1+1)的结果就会自动提升成int类型,而你要把int型的结果赋值给short型,导致数据类型不匹配了,自然就错了。
2在程序
public class FuZhi
{
public static void main(String args[])
{
short s1=1;
s1+=1;
System.out.println("s1="+s1);
}
}
是没有错误的 ,因为+=是一个赋值符,会直接把结果转换成相应的类型的。
作者:
邓飞飞
时间:
2012-3-16 11:22
在程序
public class FuZhi
{
public static void main(String args[])
{
short s1=1;
s1=s1+1;
System.out.println("s1="+s1);
}
}
这个程序的错误是你定义的s1是short类型的占两个字节,二在s1=s1+1中由于整数1在java中默认是int类型占四个字节,所以在(s1+1)的结果就会自动提升成int类型,而你要把int型的结果赋值给short型,导致数据类型不匹配了,自然就错了。
2在程序
public class FuZhi
{
public static void main(String args[])
{
short s1=1;
s1+=1;
System.out.println("s1="+s1);
}
}
是没有错误的 ,因为+=是一个赋值符,会直接把结果转换成相应的类型的
作者:
杨华威
时间:
2012-3-16 13:05
s1是short类型,1是int类型,相加后的结果是int类型,short类型的s1直接接收int类型的结果肯定不行。但是可以使用强制转换符号short将结果转化为short类型后赋值s1,可以写成s1=(short)(s1+1);
作者:
刘_浩
时间:
2012-3-17 09:30
本帖最后由 liuhao411 于 2012-3-17 09:37 编辑
liuhao411 发表于 2012-3-16 00:54
s =1.s=s 1。第三个s是short形的而后面1是Int形的,所以第三个S自动提升为int形的。即(s十1)为int。而S十 ...
short s1=1;s1=s1+1;(这里的1是4字节的,而short s=1是2字节的),所以在执行s1=s1(short)+1这时s1会由short提升到int.所以这时你再将s1+1赋给s1,就有问题了。而s1+=1,没有提升这个过程,一直是short的。
作者:
黑马肖凯骏
时间:
2012-3-17 10:02
s1=s1+1,s是short,占2个字节,1是int类型,占4个字节,两个不同类型的转换,得采取强制类型转换才行,否则不能赋给等式左边的short类型的变量s s1+=1;+=是赋值运算,会自动转换。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2