-本文仅为个人学习总结,方便个人复习,文章大部分内容为参考资料上的知识点。
Java提供了哪些基本数据类型
Java一共提供了八种原始的数据类型:byte、short、int、long、float、double、char、boolean)。
这些数据类型不是对象,是Java语言中不同于类的特殊类型,这些基本类型的数据变量在声明之后就会立刻在栈上被分配内存空间。
| 数据类型 | 字节长度 | 范围 | 默认值 | 包装类 |
|---|---|---|---|---|
| int | 4 | [-231~231-1] | 0 | Integer |
| short | 2 | [-32768~32767] | 0 | Short |
| long | 8 | [-263~263-1] | 0L或0l | Long |
| byte | 1 | [-128~127] | 0 | Byte |
| float | 4 | 32位IEEE754单精度范围 | 0.0F或0.0f | Float |
| double | 8 | 64位IEEE754双精度范围 | 0.0 | Double |
| char | 2 | Unicode[0,65535] | u0000 | Character |
| boolean | 1 | true和false | false | Boolean |
以上这些数据类型可以分为如下4中类型:
1、int长度数据类型:byte(8bit)、short(16bit)、int(32bit)、long(64bit);
2、float长度数据类型:单精度(32bit float)、双精度(64bit float);
3、boolean类型变量的取值:ture、false(理论上只需1bit,但设计上考虑对齐等因素,一般考虑占用一个字节);
4、char数据类型:unicode字符(16字节)。
此外,Java语言还提供了对这些原始数据类型的封装类(字符类型 Character,布尔类型Boolean,数值类型Byte、Short、Long、Float、Double)。需要注意的是Java中的数值类型都是有符号的,不存在无符号数,他们的取值范围也是固定的,不会随着硬件环境或者操作系统的改变而改变。
此外还有基本类型void,他也有对应的封装类java.lang.void,只是无法直接对它进行操作而已。
-
封装类型和原始类型的不同点:
1、原始数据类型在传递参数时都是按值传递,而封装类是按引用传递;
2、当封装类型和原始数据类型用作某个类的实例数据时,它们所制定的默认值不同。对象引用实例变量的默认值为null,而原始类型实例变量的默认值与它们类型有关(例如int默认初始化值为0)。 -
在Java语言中,默认声明的小数是double类型的,因此在float类型的变量进行初始化的需要进行类型转换。float类型的变量有两种初始化方法:float f = 1.0f或者float f = (float)1.0。同理默认的整数类型是int,给long复制的时候需要:long l = 2164761316574L。
不同数据类型的转换
当参与运算的两个变量的数据类型不同时,就需要进行隐式的数据类型转换,转换的规则为:从低精度向高精转换,即优先级满足byte<short<char<int<long<float<double,例如不同数据类型的值在进行计算时,short类型数据能够自动转为int类型。反之,则需要进行强制类型转换实现。
1.类型自动转换
| 操作数1的类型 | 操作数2的类型 | 转换后的类型 |
|---|---|---|
| long | byte short char int | long |
| int | byte short char | int |
| float | byte short int char long | float |
| double | byte short int char long float | double |
当类型自动转换时,需要注意以下几点:
1、char类型的数据转换为高级类型,会转换为其对应的ASCII码;
2、byte、short、char类型的数据在参与运算时自动转换为int型,但当使用“+ =”运算时,就不会产生类型的转换。
3、在Java语言中,基本数据类型与boolean类型是不能相互转换的。
2.强制数据类型转换
| 原操作数的类型 | 转换后操作数的类型 |
|---|---|
| byte | char |
| char | byte char |
| short | byte char |
| int | byte char short |
| long | byte short char int |
| float | byte short char int long |
| double | byte short char int long float |
- Java语言在设计byte、short 和char类型的计算的时候,会强制把数据类型转换为int类型,例如两个byte类型相加最后会得到一个int类型的值。如果要保持类型不变,则需要显试的表达:short s1 = (short)s1 + 1。例外:“+ =”为Java语言规定的运算符,Java编辑器会对其进行特殊的处理,因此,语句short s1 = 1;s1 + = 1能够编译通过。
运算符的优先级
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 | . () [ ] | 从左向右 |
| 2 | +(正) -(负) ++ – ~ ! | 从左向右 |
| 3 | * / % | 从左向右 |
| 4 | +(加) -(减) | 从左向右 |
| 5 | << >>(无符号右移) >>>(有符号右移) | 从左向右 |
| 6 | < <= > >= instanceof | 从左向右 |
| 7 | == != | 从左向右 |
| 8 | & | 从左向右 |
| 9 | I | 从左向右 |
| 10 | ` | 从左向右 |
| 11 | && | 从左向右 |
| 12 | ^ | 从左向右 |
| 13 | ?: | 从左向右 |
| 14 | = += -= *= /= %= &= =I= ^= ~= <<= >>= >>>= | 从左向右 |
++i与i++
不同点在于:i++是在程序执行完毕后进行自增,++i是在程序执行前进行自增。
如何实现无符号数的右移操作
Java语言中,有两种右移运算符:“>>”和“>>>”。不同点在于:“>>”在执行右移操作时,若参与运算的数字为正数,则在高位补0;若为负数,则在高位补1;而“>>>”无论参与运算的数字是正是负,在执行运算的时候,都会在高位补0。
- 在进行移位操作的时候,编辑器会将char、byte、short类型自动地将数值转换为int类型再进行移位操作。由于int类型为4Byte(32bit),因此当右移的位数超过32bit时,移位运算没有任何意义。所以,在Java语言中,为了保证移动位数的有效性,以使右移的位数不超过32bit,才用了取余的操作,即a>>n等价于a>>(n%32)。
本文全面解析Java中的八种基本数据类型:byte、short、int、long、float、double、char和boolean,包括它们的字节长度、范围、默认值及包装类。探讨了数据类型转换规则、运算符优先级,并介绍了强制类型转换的方法。

1380

被折叠的 条评论
为什么被折叠?



