一、数据类型
Java中有八种基本数据类型
分类 | 数据类型 | 字节数 | 二进制位数 | 范围 | 规律 |
---|---|---|---|---|---|
整数类型 | byte | 1 | 8 | -128~127 | -27~27-1 |
short | 2 | 16 | -32768~32767 | -215~215-1 | |
int | 4 | 32 | -2147483648~2147483647 | -231~231-1 | |
long | 8 | 64 | -9223372036854775808 ~ 9223372036854775807 | -263~263-1 | |
浮点类型 | float | 4 | 32 | 1.4E-45~3.4028235E38 | |
double | 8 | 64 | 4.9E-324~1.7976931348623157E308 | ||
字节类型 | char | 2 | 16 | 0~65535 | 0~216-1 |
布尔类型 | boolean |
|
| true或false | true或false |
《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”
1.整数类型
1.1取值范围理解
以byte类型为例,其最大取值为:27-1
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
最小取值为:-27
理论上最小取值应为-27-1 ,但是由于0的原码为
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
所以为了不造成浪费,规定(-0)
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
代表-27
因此byte的取值范围为-27~27-1
2.进制
常用的整数进制分为二进制、八进制、十进制、十六进制
//以下集中方式表示十进制50
//以0b或0B开头的是二进制
int a = ob01111110;
//以0开头的是八进制
int b = 062;
//十进制
int c = 50;
//0x或0X开头的是十六进制
int d = 0x32
以50为例,其换算方法为
3.浮点数类型
Java的浮点数遵循IEEE 754标准,采用二进制数据的科学技术法来表示浮点数,Java中浮点数默认类型为double。
float:第1位为符号位,接下来8位表示指数,最后23位表示尾数;
double:第1位为符号位,接下来11位表示指数,最后52位表示尾数。
三个特殊的浮点数:正无穷大(Float/Double.POSITIVE_INFINITY)、负无穷大(Float/Double.NEGATIVE_INFINITY)、非数(Float/Double.NaN);所有正无穷大的数据都相等,所有负无穷大的数据都相等,非数不与任何数相等(包括自身)。
4.字符类型
Java语言使用16位的Unicode字符集作为编码方式,支持所有语言。
字符型通常用于单个字符,用单引号「 ' 」括起来。字符型值也可以用十六进制编码来表示,范围是'\u0000~\uFFFF',一共可以表示65536(216-1)个字符,其中前256个字符和ASCII码中的字符完全吻合。
如果把0~65536的整数值赋予char类型的变量,系统自动会把int类型转换成char类型。
char a = '\u4e2d';
System.out.println(a);//输出字符'中'
char b = '国';
System.out.println((int)b);//输出22269
char c = 97;
System.out.println(c);//输出字符'a'
5.数值中使用下划线分隔
Java7引入了下划线用以分隔数值,使之更易读懂。
int k = 0b0000_0000_0001_1110_0000_0000_1111_1110;
double m = 3.14_15_92_65;
int j = 100_000_000;
6. 自动类型转换
任何基本数据类型和字符串进行连接运算后会自动转换为字符串
7.强制类型转换
如果需要将上图中箭头右边的数据类型转换为左边的数据类型,则必须要进行强制类型转换。格式如下:
(type)value
由于强制类型转换一般是将较长的数据类型转换成较短的数据类型,所以可能会造成位的溢出,从而造成数据转换错误。
int a = 345;
byte b = (byte)a;
System.out.println(b);//输出为89
int类型的345(101011001)
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 |
转换为btye类型后成为89(1011001)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 |
如图所示超过byte的长度部分被截断,所以造成转换后的数据不正确。
在一个算数表达式中如果包括多种数据类型,则会其结果的数据类型会被提升。
- byte、short、char 会被提升至int
- 多中数据类型会被提升至最高等级的数据类型
- 如果与字符串进行拼接则会被转换成字符串
二、运算符
Java中运算符分为:算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、类型相关运算符。
1.算术运算符
常用的有七种基本运算符
1.1四则运算符
加法: + ;减法: - ;乘法: * ;除法: / ;取余: % ;其中整数之间的除法会对结果进行自然截断(9/2=4)
1.2 赋值运算符
赋值运算符: = 将赋值号右边的值装入左边的变量中
1.3位运算符
通常情况下,位运算符只用于操作整数类型的变量(操作的是补码)
&:按位与。两位同时为1时返回结果1
|:按位或。单目运算符,两位其中一位为1时返回结果为1
~:按位非。将操作数除符号位以外逐位取反
^:按位异或。两位相同时返回0,不同时返回1
<<:左移运算符(移位后,在最右侧用0补位)
>>:右移运算符(移位后,在最左侧以原符号位补位)
>>>:无符号右移运算符(移位后,在最左侧以0补位)
以上运算符可以与赋值运算符搭配使用(如:+=、|=、%=、<<=)
1.4比较运算符
>:大于
>=:大于等于
<:小于
<=:小于等于
==:等于
!=:不等于
对于等于(==)运算符,如果操作数为数值类型,即使数据类型不同,只要两者的值相同,则返回true(如:97=='a'、5.0==5);如果操作数为引用类型,则必须当两个变量指向同一个对象时才能返回true。
1.5逻辑运算符
&&:与,两个操作数都为true才返回true,当第一个操作数为false时直接返回false,不用判断第二个操作数,即会短路
&:与,不会短路
||:或,两个操作数其中一个为true时返回true,当第一个操作数为true时直接返回true,不用判断第二个操作数,即会短路
|:或,不会短路
!:非
^:异或,两个操作数不同时返回true。
1.6三目运算符
条件 ? 满足返回结果 : 不满足返回结果