Java的数据类型
Java八大数据类型:
(1)整数类型:byte、short、int、long
(2)小数类型:float、double
(3)字符类型:char
(4)布尔类型:boolean
变量的命名
- 只能包含字母、数字、_和$符,并且不能以数字开头
- 严格区分大小写
- 不能使用关键字
- 允许中文命名,但不建议
8个数据类型
- 8个数据类型分别为:byte, short, int, long, float, double, char, boolean
- 注意都是小写字母哟
1. byte(字节型)
- 1个字节,也就是8个bit(位)
- byte的范围是在: -128(-2的7次方) -127(2的7次方减一)
2. short(短整型)
- 两个字节,也就是16个bit
- short的范围是在: -2的15次方 - 2的15次方减一
- 一般不用
3. int(整型)
-
4个字节, 也就是32个bit
-
int的范围是在:
-2的31次方 - 2的31次方减一 (-21多个亿到21多个亿)
-
注意事项:
1.整数直接量默认为int类型,但不能超范围,若超范围则发生编译错误(Integer number too large)
2.整数运算时,若超出int范围则发生溢出(溢出不是错误,但需要避免)
例如我们假设赋值给a的最大值是2^31-1=2147483647:int a = 2147483647; System.out.println(a+1);
结果是-2147483648,导致了溢出,这个就像一个圆一样,溢出的时候从最最大值来到了最小值,如果是a+2,结果会是-2147483647
4. long(长整型)
- 8个字节, 也就是64个bit
- int的范围是在:
-2的63次方 - 2的63次方减一
-
长整型直接量需在数字后加L或l
-
运算时若有可能溢出,建议在第1个数字后加L
例子:long a = 25L; //25L为长整型直接量 //long b = 10000000000; //编译错误,100亿默认为int类型,但超出int范围了 long c = 10000000000L; //100L为长整型直接量 //long d = 3.14; //编译错误,长整型变量只能装整数 //运算时若有可能溢出,建议在第1个数字后加L long e = 1000000000*2*10L; System.out.println(e); //200亿 long f = 1000000000*3*10L; System.out.println(f); //不是300亿 //因为1000000000*3是int类型,会有溢出(30亿>21亿),所以最后结果不是300亿 long g = 1000000000L*3*10; System.out.println(g); //300亿 //这里10亿的时候是long所以即使后面乘上2个int最后输出的结果是long,没有超过范围
5. boolean(布尔类型)
- 1个字节 只有 true 和 fasle
6. float(单浮点类型)
- 4个字节, 也就是32个bit
- int的范围是在: -2的31次方-2的31次方减一
- 对小数部分的精度要求不是特别高
- float需要在后面加上f或者F
例子:float f =1.1;//错误的,因为默认是double,float类型小于double,所以需要强制转 float f =1.1f;//正确的
7. double(双精度浮点类型)
- 8个字节, 也就是64个bit
- int的范围是在: -2的63次方-2的63次方减一
- 精确的小数部分并且操作值很大时
-
浮点数直接量默认为double型,若想表示float需在数字后加F或f
-
double与float型数据参与运算时,有可能会出现舍入误差,精确场合不能使用
出现误差的原因是你给一个变量赋值,其实赋值到内存里面的还有小数点后面好多位,所以最后得到的结果会有误差,例如:double d=6.0,e=5.3; System.out.println(d-e);
在IDEA运行出来的结果是0.7000000000000002,所以说小伙伴们要注意千万不要用double或者float去算钱,到时候出现问题千万别来找我。
8. char(字符型)
- 2个字节但是只用一个字节
- 字符型 ,字符型直接量必须放在单引号中,单引号里面只能写一个,不能两个符号
例子:
char c8=65;
System.out.println(c8);
输出来的是A,因为我们定义的是字符型
-
采用的是Unicode字符集,一个字符对应一个码,表现的形式是字符char,本质上是码int(0到65535之间)
最主要需要记住的ASCII码:‘a’—97 ‘A’—65 ‘0’—48。 范围数值是:0-65535
如果感兴趣的可以去这个链接或者自己查找:https://blog.csdn.net/jiayoudangdang/article/details/79828853 -
特殊符号需要‘\‘来转义。
例子
char c8='\''; System.out.println(c8);
结果出来是 ’ 。
另外
char c8='\\'; System.out.println(c8);
输出结果是 \ 。
总结
类型之间的转换
1.基本类型由小到大:
byte<short<int<long<float<double
- byte最小
- 注意浮点类型永远比整型大
-
从小到大是自动/隐士类型转换
比如:
long a=1;
在这里右边的int整型转换成左边long长整型是从小转成大是自动转。
-
从大到小是强制转换
强制转有可能丢失精度,特别是从浮点类型转换成整型的时候会丢失小数点。
例子:double a=10.55; int b=(int)a; System.out.println(b);
输出的结果是10,因为a的浮点型转换到b,变成了int型,去掉了小数点。
2.两点互转
-
只能用直接量,不能用变量,整数直接量可以直接赋值给byte,short,char,但不能超出范围
-
byte,short,char参与运算的时候自动转成int类型
例子:
在例子中虽然a和b都是short类型,但是经过运算过后就变成了int整型,但是int转short需要强转,所以才报错一些互转的例子:
System.out.println(2+2); //4 System.out.println(2+'2'); //52,2加上'2'的码50 System.out.println('2'+'2'); //100,'2'的码50,加上'2'的码50
下面是一个很经典的例子,'2’是char,"2"是字符串
System.out.println('2'+"2");
输出是“22”,原因是代码中的"+"其实是连接符,当他是运算符的时候’2’才是转换成int
引用数据类型
引用数据类型分3种:类(class),接口(interface),数组(array)。
简单来说就是需要我们定义或者别人已经定义好了,我们可以拿来直接用。