java学习笔记(二)--java数据类型
2014-03-22 11:49
148 查看
java的第二个内容的学习就是java的数据类型,java是一个强类型的语言,就是在每个变量和每个表达式都有一个在编译时就确定的类型,所以所有的变量必须显示声明。同C语言一样需要先声明在使用。数据类型分为基本数据类型和引用数据类型,听着名字非常的高大上,所谓基本数据类型就是我们通常所说的int,long,float,double这些,而引用数据类型是指包括类、接口、数组类型,就是对一个对象的引用,类似于C语言的指针。
一、基本数据类型
注:
1. 如果使用一个较大的整数(超出了Int的表数范围),java并不会自动将其转化成long型,如果希望一个整数当成long型处理,需要在整数后面加上l和L。
2. Java中的数有四种表示方法,二进制,八进制,十进制,和十六进制。其中二进制计数是JDK 7中新增的。二进制以0b或者OB开头,八进制以0开头,十进制为默认情况,十六进制以0x开头。需要注意的是以二进制存储时,若定义整数int类型,如int number = 0B10000000000000000000000000000011时,最高位是符号位。0表示正数,1表示负数,所以number的值为-2147483645,如果在后面加上L,即int number= 0B10000000000000000000000000000011L,由于long型为64位,所以第32位不是符号位,输出为2147483651。
3. 字符型表示单个字符,可以是中文或者英文字符或者转义字符。注意char类型使用单引号,而String类型由多个字符组成,使用双引号。
4. Java浮点型默认为double类型,如果希望java把一个浮点类型当成float类型,需要在浮点型常数后面加上f或者F。
二、基本类型的类型转换
2.1 自动类型转换
系统直接将某种基本类型赋值给另一种基本类型的变量,称为自动类型转换。当一个表数范围小的数值或变量直接赋值给另一个表数范围大的变量,系统可以进行自动类型转换。
上图中虽然float是32位,而long型是64位的,但是float的表数范围超过long型,float的字段长度和表数范围与机器无关,他是通过指数加尾数的方式,即第一位是符号位,接下来八位是指数,在接下来32位是尾数。
同时,当任何基本类型的值和字符串进行连接运算时,基本类型的值将自动转化为字符串类型。,虽然字符串不是基本类型,而是引用类型。
2.2 强制类型转换
如果希望将上图中箭头右边的类型转换为左边的类型,则必须进行强制转换,强制转换的语法为(type) value,强制类型转换会有可能损失精度。如果原变量是浮点型的数,强制类型转换成整型的数,相当于进行取整运算。
2.3 类型转换的注意事项
1. 强制类型转换不仅仅是损失精度的问题
得到的值为-56,如果仅仅损失精度,对于溢出的处理应该是127。Java的处理为将200变为二进制,然后截取后8位,得到11001000,第八位是符号位,得到的是负数,也就是补码形式。将补码减1再取反得到的是原码,得到为56,加上符号位-56 。
2. 浮点型的定义错误
当我们定义一个浮点型时,不要用到很精确的值,我们相对会选择float型,于是出现:
但是java告诉我们错误,因为浮点型的默认存储是double型,如果想转换成float型,在常数后面加上f或者F就可以了。
3. 表达式类型的自动提升
当一个算数表达式中包含多个基本类型的值时,整个算术表达式的数据类型将会自动提升,在最高的提升范围为当前表达式中的最高类型。
上面程序就会出错,由于2在java中默认是int形式,所有右边表达式的值被自动提升到int型,但是左边仍是short型,所以出错。
解决的方法也是很神奇,只需要将第二行代码改为:
sValue -= 2;
执行上面的代码就不会出错,因为上述代码在java中执行为
sValue = (short)sValue-2;
显式的将右边转化为short型。
另一个需要注意的问题就是最高类型时。当执行下面代码时:
结果当然是2,因为上面程序中的最高类型是int型,所以最后的结果的最高类型也只能是int型,如果需要输出结果为2.5,只需要将2改为2.0就可以了,那么最高类型就是double型(不是float型哦)。
三、总结
Java的表达式总的来说和C语言等其他C语系的语言有很多相似的地方,当然也同样有一些陷阱,多多编程自己的水平应该会有提高的吧。
114
一、基本数据类型
布尔类型 | boolean | 1位 | true或者false |
字符类型 | char | 2个字节16位 | |
整数类型 | byte | 1个字节8位 | -128 ~ 127 |
short | 2个字节16位 | -32768 ~ 32767 | |
int | 4个字节32位 | -2147483648 ~ 2147483647 | |
long | 8个字节64位 | -231 ~ 231-1 | |
浮点类型 | float | 4个字节32位 | |
long | 8个字节64位 | |
注:
1. 如果使用一个较大的整数(超出了Int的表数范围),java并不会自动将其转化成long型,如果希望一个整数当成long型处理,需要在整数后面加上l和L。
2. Java中的数有四种表示方法,二进制,八进制,十进制,和十六进制。其中二进制计数是JDK 7中新增的。二进制以0b或者OB开头,八进制以0开头,十进制为默认情况,十六进制以0x开头。需要注意的是以二进制存储时,若定义整数int类型,如int number = 0B10000000000000000000000000000011时,最高位是符号位。0表示正数,1表示负数,所以number的值为-2147483645,如果在后面加上L,即int number= 0B10000000000000000000000000000011L,由于long型为64位,所以第32位不是符号位,输出为2147483651。
3. 字符型表示单个字符,可以是中文或者英文字符或者转义字符。注意char类型使用单引号,而String类型由多个字符组成,使用双引号。
4. Java浮点型默认为double类型,如果希望java把一个浮点类型当成float类型,需要在浮点型常数后面加上f或者F。
二、基本类型的类型转换
2.1 自动类型转换
系统直接将某种基本类型赋值给另一种基本类型的变量,称为自动类型转换。当一个表数范围小的数值或变量直接赋值给另一个表数范围大的变量,系统可以进行自动类型转换。
上图中虽然float是32位,而long型是64位的,但是float的表数范围超过long型,float的字段长度和表数范围与机器无关,他是通过指数加尾数的方式,即第一位是符号位,接下来八位是指数,在接下来32位是尾数。
同时,当任何基本类型的值和字符串进行连接运算时,基本类型的值将自动转化为字符串类型。,虽然字符串不是基本类型,而是引用类型。
2.2 强制类型转换
如果希望将上图中箭头右边的类型转换为左边的类型,则必须进行强制转换,强制转换的语法为(type) value,强制类型转换会有可能损失精度。如果原变量是浮点型的数,强制类型转换成整型的数,相当于进行取整运算。
2.3 类型转换的注意事项
1. 强制类型转换不仅仅是损失精度的问题
int num = 200; byte bNum = (byte)num;
得到的值为-56,如果仅仅损失精度,对于溢出的处理应该是127。Java的处理为将200变为二进制,然后截取后8位,得到11001000,第八位是符号位,得到的是负数,也就是补码形式。将补码减1再取反得到的是原码,得到为56,加上符号位-56 。
2. 浮点型的定义错误
当我们定义一个浮点型时,不要用到很精确的值,我们相对会选择float型,于是出现:
float a = 4.1;
但是java告诉我们错误,因为浮点型的默认存储是double型,如果想转换成float型,在常数后面加上f或者F就可以了。
3. 表达式类型的自动提升
当一个算数表达式中包含多个基本类型的值时,整个算术表达式的数据类型将会自动提升,在最高的提升范围为当前表达式中的最高类型。
short sValue = 5; sValue = sValue - 2;
上面程序就会出错,由于2在java中默认是int形式,所有右边表达式的值被自动提升到int型,但是左边仍是short型,所以出错。
解决的方法也是很神奇,只需要将第二行代码改为:
sValue -= 2;
执行上面的代码就不会出错,因为上述代码在java中执行为
sValue = (short)sValue-2;
显式的将右边转化为short型。
另一个需要注意的问题就是最高类型时。当执行下面代码时:
int number = 5; System.out.println(5/2);
结果当然是2,因为上面程序中的最高类型是int型,所以最后的结果的最高类型也只能是int型,如果需要输出结果为2.5,只需要将2改为2.0就可以了,那么最高类型就是double型(不是float型哦)。
三、总结
Java的表达式总的来说和C语言等其他C语系的语言有很多相似的地方,当然也同样有一些陷阱,多多编程自己的水平应该会有提高的吧。
114
相关文章推荐
- [学习笔记]Java基本数据类型包装类
- java学习笔记4-数据类型
- JAVA学习笔记之数据类型
- Java学习笔记(三)数据类型
- Java学习笔记---关键字、变量与数据类型
- java学习笔记(二) ----基本数据类型应用
- 【Java学习笔记】数据类型
- Java学习笔记--数据类型
- Java学习笔记之数据类型
- 【Java学习-J.160411.0.7】笔记6-Java语言特点及数据类型
- 黑马程序员-JAVA学习笔记-基本数据类型及其转换
- java个人学习笔记02(注释+数据类型+算术逻辑运算)
- Java学习笔记----打印基本数据类型范围
- <Head First Java>学习笔记--第三章:primitive主数据类型和引用
- NO2.Java学习笔记【关键字、类名、标识符、注释、变量与常量、数据类型、进制、运算符】
- java学习笔记2——java数据类型总结
- Java学习笔记(基本数据类型和变量命名规则)
- (JAVA SE 学习笔记)Java.SE.第002讲.原生数据类型 (Primitive Data Type)
- 黑马程序员_java基础学习笔记01_变量,数据类型,运算符
- java学习笔记(2)基本数据类型对象包装类