本次主要记录的是基本数据类型、数据类型转换、基本运算符和进制表示四块内容。
基本数据类型
java中基本数据类型有八种基本类型,包括整数型、浮点型、字符型和布尔类型这几类。如有不足,多多指教。
整数类型
java中整数类型有byte、short、int、long共四种。占八种基本数据类型的一半。
类型 | 范围 | 默认值 | 位 |
---|---|---|---|
byte | -128~127 | 0 | 8 |
short | -32768~32767 | 0 | 16 |
int | -2147483658~2147483657 | 0 | 32 |
long | -2^31~2^31-1 | 0L | 64 |
其中,整数的默认类型是int,所以使用long类型时,如果数据范围超过int,要在其值后加上L/l,来转型为long。但l和1(一)太相像,所以通常用大写的L。而byte和short就不需要类型转换,因为它们的数据范围本身比int小,自然不会超过int表示范围。
1 | //这些都在自己的数据范围内 |
而下面则是错误示范,还没运行,编译器自动提示错误:前两个是类型不匹配,无法从int转为byte/short,后两个都是超过int数据类型的范围。更能说明long的默认数据类型是int,因为他没超过long的数据范围。
浮点类型
类型 | 范围 | 默认值 | 位 |
---|---|---|---|
float | 1.4E-45~3.4028235E38 | 0.0f | 32 |
double | 4.9E-324~1.7976931348623157E308 | 0.0d | 64 |
浮点类型数据范围挺大的,但不太精确,做运算都有可能有误差。不过double则要比float类型精确些,而且在java中,浮点类型的默认类型是double。所以,我们通常使用double更多。当然也可以使用float,不过要在其值加上f,否则编译器会报错。
1 | //float使用 |
以下是以doubl为例,进行的运算。
1 | double a = 12.3; |
这是以加法为例,说明浮点类型在进行运算的不可靠。而可能这几行代码在你的电脑就全是true。当然这你可能会有疑惑,浮点计算不可靠,那咋办?其实java有自己的类进行浮点运算,那就是BigDecimal,它属于Math类中,以后讲常用类会提及。
字符类型
java中字符类型是char表示,数据范围从0~65525,其默认值为\u0000, 在内存中占16位。
1 | char c = 'A'; //注意要打单引号,双引号就是字符串啦 |
布尔类型
java中布尔用boolean表示, 它只有两个取值true和false。true为真,false为假,默认值为false。 在内存中占1位。
1 | boolean flag = true; |
数据类型转换
数据转换分为两种,一种是自动转换,容量小的自动转换成容量大的,另一种是强制转换(强制把某种类型转换成另一种类型),强转可能会出现精度损失。
什么是精度损失?比如1.9的浮点型,强制转为整型,就变成1,小数部分直接舍弃。
自动转换
byte–>short–>int–>long–>float–>double
char–>int
当然整型转换成浮点型,有可能会出现精度的损失。
1 | byte bt = 127; |
从代码中,这些都是自动转换,但也有人会问,为啥long都能自动转换为float,long占64位,float占32位,但java自动转换不是看谁在内存占的位数大就转谁,而是看容量。浮点型中,容量是不能直接算出来的,而float的最大值远远大于long的最大值,所以long能自动转换为float。但数值一大,就会出现精度损失。
强制转型
一般把容量大的转换成容量小的,但转换的变量数据不能超过转换后的容量,虽然编译器不会报错,但输出结果可能是错误的。
以整型为例:
1 | int a = 18; |
可以看出强制转型一定要在合理范围内,比如说,两个杯子,一个大杯子是满的,另一个小杯子是空,我们无法把大杯子的水都倒在小杯子里。反过来我们可以把装满水的小杯子倒在空的大杯子,不过这是自动转型啦。
强制把浮点型转换成整型型,可能会出行精度损失。
1 | double d = 1.9; //如果浮点本身是没有小数,转整型就不会出行精度损失 |
基本运算符
运算符 | 名称 | 例子(int型) | 结果 |
---|---|---|---|
+ | 加法 | a = 1+2 | a = 3 |
- | 减法 | a = 2-1 | a = 1 |
* | 乘法 | a = 5*2 | a = 10 |
/ | 除法 | a = 5/2 | a = 2 |
% | 求余/取模 | a = 5%2 | a = 1 |
++ | 自增 | a1 = a2 = 2; b = a1++; c = ++a2 | b = 2; c = 3 |
- - | 自减 | a1 = a2 = 2; b = a1- -; c = - -a2 | b = 2; c = 1 |
~ | 取反 | a = ~6 | a = -7 |
& | 与 | a = 5; b = 3; c = a&b | c = 1 |
| | 或 | a = 5; b = 3; c = a|b | c = 7 |
^ | 异或 | a = 5, b = 3; c = a^b | c = 6 |
<< | 左移(*2) | a = 1<<2 | a = 4 |
>> | 右移(/2) | a = 8>>3 | a = 1 |
以上就是java中最常用的运算符,加减乘数是基本的四则运算,整数和浮点型可以一起运算,但是,低的数据类型会向高的数据类型自动转换。如果不同类型进行运算,赋值的变量数据类型要是最大的那个。
四则运算
1 | int a1 = 12; |
求余
% 就是求一个数除以另一个数得到它的余数,所以称为求余或取模。
1 | int a = 10%3; //输出 1 |
~
这里以前没写,忘了,现在加上
1 | 对6取反 |
++和- -
自增是自己加1,自减是自己减1,但要注意放的位置。
1 | //++和--都一样,以++为例 |
&、|
1 | int a1 = 5, b1 = 3; |
^
1 | int a = 5, b = 3; |
当然,还有一个!,但是在java中,!只进行表达式运算,而表达式计算的结果为true或false,也就是获得一个布尔值。而其它语言,像C/C++布尔值可以用0表示false,非0表示true,进行简单的运算。
<<和>>
左移一位是乘2,左移两位是乘4……以此类推。右移一位是除以2,右移两位是除以4……以此类推。通常在乘2或除以2,建议用<<和>>,效率上要比*和/快一点。
1 | int a = 1<<2; //输出 a为4 |
进制表示
“世界上只有10中人,一种是懂二进制,另一种是不懂二进制”。
二进制由0和1组成,而我们的代码最终也会变成二进制运行,计算机也是以二进制进行工作,网络信息也是以二进制在物理层传输。所以二进制对我们来不会很陌生。
初次之外,我们还有八进制、十六进制和常用的10进制,让我们用代码表示。
1 | //都表示输入10这个数 |
以上就是本次总结,本来还想写很多,把常用语句也记录上,那样就会太长了,只能等下一篇文章了。如有不足之处,请在下方评论区留言,谢谢您的来访~ ~ ~下次见。