1. 如果给long型变量赋予的值超出了int型值的范围,数字后必须加L(不区分大小写)标识 。
2.没有F(不区分大小写)后缀标识的浮点数默认为double型的,不能将它直接赋值给float型变量 。
eg: float d=1.5; //错误
float d=1.5F; //正确
3.把一个double型值赋值给byte、short、int、long、float型变量,编译时会报错,即使这个值没有超出这些类型的取值范围 。
几条结论:
(1)未带有字符后缀标识的整数默认为int类型;未带有字符后缀标识的浮点数默认为double类型。
(2)编译器会在编译期对byte、short、int、long、float、double、char型变量的值进行检查,如果超出了它们的取值范围就会报错。
(3)带有“F”(不区分大小写)后缀的整数和浮点数都是float类型的;带有“D”(不区分大小写)后缀的整数和浮点数都是double类型的。
(4)如果一个整数的值超出了int类型能够表示的范围,则必须增加后缀“L”(不区分大小写,建议用大写,因为小写的L与阿拉伯数字1很容易混淆),表示为long型。
(5)int型值可以赋给所有数值类型的变量;long型值可以赋给long、float、double类型的变量;float型值可以赋给float、double类型的变量;double型值只能赋给double类型变量。
4.运算符对基本类型的影响
(1)当使用+、-、*、/、%运算符对基本类型进行运算时,遵循如下规则:
a.只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;
b.否则,只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;
c.否则,只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;
d.否则,两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。
(2)当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:
a.运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。
eg:
short q=12;
q=q+1;//错误
q+=1;//正确
编译错误:Type mismatch cannot convert from int to short .
5.当使用“==”运算符在基本类型和其包装类对象之间比较时,遵循如下规则:
(1)只要两个操作数中有一个是基本类型,就是比较它们的数值是否相等。
(2) 否则,就是判断这两个对象的内存地址是否相等,即是否是同一个对象。
(3)尤其注意Integer x=2。自动装箱为Integer类型。
Integer i=new Integer(2);
Integer w=new Integer(2);
Integer x=2;
System.out.println(2==x);
System.out.println(i==x);
运行结果:
true
false
6.Math.round();
Math类的round()方法的运算结果是一个<=(参数值+0.5)的最大整数。
7.switch()语句
(1)byte、char、short、int四种基本类型以及它们的包装类(需要Java5.0/1.5以上版本支持)都可以用于switch语句。
(2)long、float、double、boolean四种基本类型以及它们的包装类(在Java所有版本中)都不能用于switch语句。
(3)enum类型,即枚举类型可以用于switch语句,但是要在Java5.0(1.5)版本以上才支持。
(4)所有类型的对象(包括String类,但在Java5.0/1.5以上版本中,该项要排除byte、char、short、int四种基本类型对应的包装类)都不能用于switch语句。