java的数据类型

java是强类型语言,要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。

java的数据类型分为两大类:

     基本数据类型(primitive type)

    引用数据类型(reference type)

基本数据类型

1.boolean 布尔类型,它比较特殊,布尔类型只允许存储true(真)或者false(假),不可以用0或者非0表示。可以使用 1 bit 来存储,但是具体大小没有明确规定。JVM 会在编译时期将 boolean 类型的数据转 换为 int,使用 1 来表示
true,0 表示 false

2.char 字符类型,它在内存中占用2个字节,也就是16 bit,因为java本身的字符集不是用ASCII码来存储的,而是用的16位的Unicode字符集,所以它的字符存储范围也就是’\u0000
– u\ffff’,默认值呢?就是’\u0000’

3.整数类: 下面从小到大来一一介绍:

byte:可以说是java中最少的数据类型了,它在内存中占用1个字节,也就是8位(bit),值得范围是:-128~127, 也就是-2的7次方到2的7次方减一,默认值是0B.

short:短整型,它在内存中占用的是2个字节,16位,值得取值范围是-32768~32767,也就是-2的15次方到2的15次方减一,默认值也是0S.

int:整型,在内存中占4个字节,32位,值得取值范围是-2147483648~2147483647,也就是-2的31次方到2的31次方减一,默认值还是0

long:长整型,在内存中占8个字节,64位,值的取值范围是-2的63次方到2的63次方减一,默认值要注意了,因为是长整型,所以默认是虽说是0,但是准确的说是0L,必须要加上L来表示它是long类型,不加就成了int类型了.

4.浮点类:

不声明小数类型的情况下,默认为double

float :单精度浮点型, 在内存中占4个字节,32位,主要用来存储小数的,但是有限制,有效小数位只有6~7位,默认是0.0f , 取值范围是:3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示
乘以10的负45次方)

double:双精度浮点型,在内存中占8个字节,64位,也是用来存储小数的,默认是0.0,取值范围是1.797693e+308 到4.9000000e-324(e+308表示是乘以10的308次方,同样,e-324表示乘以10的负324次方)

数据类型转换(boolean不参与数据类型的转换):
char(16 bit) | byte(1 bit) -> short(16 bit) -> int(32 bit) -> long(64 bit) | |
float(32 bit) double(64 bit) 根据类型所占内存大小,由高位类型转换低位类型没问题,低位转高位会出现精度丢失。

(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。

字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示。

1B(byte,字节) = 8bit(位)

字符:是计算机中使用的字母,数字,字和符号

1bit表示1位

1Byte表示一个字节 1B = 8b

1024B = 1KB

1024KB = 1M

1024M = 1G

基本数据类型和引用数据类型的关系

基本数据类型二进制位数包装类(引用类型)
boolean1Boolean
byte8Byte
char16Character
short16Short
int32Integer
long64Long
float32Float
double64Double

基本数据类型与引用数据类型的异同:

1.Java基本类型存储在栈中,因此它们的存取速度要快于存储在堆中的对应包装类的实例对象。从Java1.5开始, JVM就可以完成基本类型和它们对应包装类之间的自动转换。因此我们在赋值、参数传递以及数学运算的时候
就可以像使用基本类型一样使用它们的包装类,但这并不意味着你可以通过基本类型调用它们的包装类才具有
的方法。另外,所有基本类型(包括void)的包装类都使用了final修饰,因此我们无法继承它们扩展新的类
也无法重写它们的任何方法。而引用数据类型是存储在堆中的.

包装类就是对基本数据类型的强化。简化了数据处理的步骤。基本数据类型没有任何方法和属性

2.基本类型的优势:数据存储相对简单,运算效率比较高

3.包装类的优势:有的容易,比如集合的元素必须是对象类型,满足了java一切皆是对象的思想。

4.声明方式不同,基本类型不适用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;

5.存储方式及位置不同,基本类型是直接将变量值存储在堆栈中,而包装类型是将对象放在堆中,然后通过引用来使用;

6.初始值不同,基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null。基本类型不能为空,包装类可以为null。

7.基本类型没有方法和属性,而包装类有方法和属性。

int和integer的区别:
int是基本数据类型,没有属性和方法,不能为空,默认为0.
integer是int的包装类,有属性和方法,可以为null。
延伸:
1.由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的。(new生成的两个对象,其内存地址不同)
Integer i=new Integer(100);
Integer j=new Integer(100);
System.out.println(i==j);//false
2.Integer变量和int变量比较时,只要两个变量的值是相等的,则结果为true。(integer会自动拆箱,相当于两个int变量的比较)
Integer i=new Integer(100);
int j=100;
system.out.println(i==j);//true
3.非new生成的Integer变量和new integer()生成的变量比较时,结果false。(非new生成的变量指向java常量池中的对象,而new生成的变量指向堆中新建的对象,。两者在内存中的地址不同)
Integer i=new Integer(100);
Integer j=100;
system.out.println(i==j);//false
4.对于两个非new生成的integer对象,进行比较时。两个变量值在区间-128~127之间,比较结果为true。不在这个范围为false。
Integer i=100;
Integer j=100;
system.out.println(i==j);//true
当范围不在-128~127时,结果为false。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值