基本类型与运算

本文全面解析Java中的八种基本数据类型:byte、short、int、long、float、double、char和boolean,包括它们的字节长度、范围、默认值及包装类。探讨了数据类型转换规则、运算符优先级,并介绍了强制类型转换的方法。

-本文仅为个人学习总结,方便个人复习,文章大部分内容为参考资料上的知识点。

Java提供了哪些基本数据类型

Java一共提供了八种原始的数据类型:byte、short、int、long、float、double、char、boolean)。
这些数据类型不是对象,是Java语言中不同于类的特殊类型,这些基本类型的数据变量在声明之后就会立刻在栈上被分配内存空间。

数据类型字节长度范围默认值包装类
int4[-231~231-1]0Integer
short2[-32768~32767]0Short
long8[-263~263-1]0L或0lLong
byte1[-128~127]0Byte
float432位IEEE754单精度范围0.0F或0.0fFloat
double864位IEEE754双精度范围0.0Double
char2Unicode[0,65535]u0000Character
boolean1true和falsefalseBoolean

以上这些数据类型可以分为如下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的类型转换后的类型
longbyte short char intlong
intbyte short charint
floatbyte short int char longfloat
doublebyte short int char long floatdouble

当类型自动转换时,需要注意以下几点:
1、char类型的数据转换为高级类型,会转换为其对应的ASCII码;
2、byte、short、char类型的数据在参与运算时自动转换为int型,但当使用“+ =”运算时,就不会产生类型的转换。
3、在Java语言中,基本数据类型与boolean类型是不能相互转换的。

2.强制数据类型转换
原操作数的类型转换后操作数的类型
bytechar
charbyte char
shortbyte char
intbyte char short
longbyte short char int
floatbyte short char int long
doublebyte 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&从左向右
9I从左向右
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)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值