【转】JAVA中的8中基本数据类型
?
Java语言提供了八种基本类型。六种数字类型(四个整型,两个浮点型),一种字符类型,还有一种布尔型。
1、整数:
定义:没有小数部分的数字,负数是允许的。
种类:Java提供四种整数类型:
byte????? 1个字节 ? ? -128到127
short???? 2个字节? ?? -32,768到32,767
int???????? 4个字节? ?? -2,147,483,648到2,147,483,647
long????? 8个字节 ? ? -9,223,372,036,854,775,808L到9,223,372,036,854,775,807L
2、浮点数:
定义:含有小数部分的数字。
分类:Java提供两种浮点数:
float????? 4个字节?? 约+-3.40282347E+38F(6~7个有效的十进制数位) ? 绝对值:1.4E-45~3.4E38
double? 8个字节?? 约+-1.79769313486231570E+308(15个有效数位) ? 绝对值:4.9E-324~1.8E308
说明:
1)float类型的数值有个后缀:f/F,如果没有后缀f/F,那么默认为double。double类型的数值也可以使用后缀d/D。
2)当这些数字遇到取值范围错误时,会发生(上溢Overflow);而在遇到像被零除时,会发生下溢(Underflow)。
举例:
float f? = 1.23456712f;
float ff = 1.23456789f;
double d ? = 1.23456789123456123d;//默认为double类型,可以不带d
double dd = 1.23456789123456789d;
System.out.println("f? ="+f);
System.out.println("ff ="+ff);
System.out.println("d? ="+d);
System.out.println("dd ="+dd);
输出:
f??? = 1.2345672
ff?? = 1.2345679
d?? = 1.2345678912345612? //15位精度
dd = 1.234567891234568?? //15位精度
3、字符类型:
定义:单引号用来表示char常量,是容纳单字符的一种基本数据类型,占1byte。
说明:
双引号则表示一个字串,他是Java的一个对象,并不是数据类型。
4、布尔类型:
boolean类型只有两个值:false和true。 boolean 类型的数值不能直接转换成其它类型。占1个字节。
看一下代码:
public class TestString {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// byte?????????
System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);??????????
System.out.println("包装类:java.lang.Byte");??????????
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);??????????
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);??????????
System.out.println();??
// short??????????
System.out.println("基本类型:short 二进制位数:" + Short.SIZE);??????????
System.out.println("包装类:java.lang.Short");??????????
System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);??????????
System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);??????????
System.out.println();??
// int??????????
System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);??????????
System.out.println("包装类:java.lang.Integer");??????????
System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);?????????
System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);?????????
System.out.println();??
// long??????????
System.out.println("基本类型:long 二进制位数:" + Long.SIZE);??????????
System.out.println("包装类:java.lang.Long");??????????
System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);??????????
System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);??????????
System.out.println();??
// float?????????
System.out.println("基本类型:float 二进制位数:" + Float.SIZE);?????????
System.out.println("包装类:java.lang.Float");??????????
System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);?????????
System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);????????
System.out.println();??
// double?????????
System.out.println("基本类型:double 二进制位数:" + Double.SIZE);???????
System.out.println("包装类:java.lang.Double");?????????
System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);??
System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);?????????
System.out.println();??
// char??????????
System.out.println("基本类型:char 二进制位数:" + Character.SIZE);?????
System.out.println("包装类:java.lang.Character");??
// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台??????
System.out.println("最小值:Character.MIN_VALUE=" + (int)Character.MIN_VALUE);??????????
// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台?????????
System.out.println("最大值:Character.MAX_VALUE=" + (int)Character.MAX_VALUE);
}
}
运行结果如下:

运算符对基本类型的影响
当使用+、-、*、/、%运算符对基本类型进行运算时,遵循如下规则:
只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;否则,只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;否则,只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;否则,两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。
当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:
运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。
根据以上规则,请看:
short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?
我们来写个例子试试,Java代码
publicclass PrimitiveTypeTest {????????????publicstaticvoid main(String[] args) {???????????short s1 = 1;??????????????????? // 这一行代码会报编译错误???????????????? ?// s1 = s1 + 1;?????????????????? // 这一行代码没有报错?????????? ???????? s1 = 1 + 1;??????????????????? // 这一行代码也没有报错?????????? ???????? s1 += 1;??????? ???? }???}???
当使用“==”运算符在基本类型和其包装类对象之间比较时,遵循如下规则:
只要两个操作数中有一个是基本类型,就是比较它们的数值是否相等。否则,就是判断这两个对象的内存地址是否相等,即是否是同一个对象。
?
?
?
?
http://zangweiren.iteye.com/blog/219369