【Java基础】——数据类型

概要

    Java中数据类型分为两种:基本类型和引用类型

基本类型

分为四种:


基本类型的类型转换

自动类型转换

    当一个范围小的类型直接赋给另一个范围大的类型是,系统可以自动类型转换,下图中从左到右均为自动类型转换


强制类型转换

    上图中从右向左的类型转换为强制类型转换。当数值范围比较的转向数值范围比较小的可能会溢出。

    因为计算机底层存储的是二进制,所以当发送溢出的时候直接从进行了截取,将补码从左到右截取,将剩下的部分,转换为原码输出。

表达式类型自动提升

    当基础类型数值进行算术操作的时候,数据类型自动提升到表达式中最高等级操作数同样的类型。

引用类型


包装类型

    包装类型和基本类型是一一对应的。基本类型的数据不具备面向对象的特性,没有成员变量,方法可以被调用。因为没有继承Object类,不能当成Object类型变量使用,有些需要Object类型的时候比较难处理,则为8种基本类型的数据分别定义了相对于的引用类型。

    在jdk1.5以后支持基本类型和包装类型的自动装箱和拆箱,更加方便使用了。

    jdk1.5的自动装箱拆箱机制其实在编译时自动完成替换的。装箱阶段自动替换了valueOf方法,拆箱阶段自动替换为了xxxValue方法。对应Integer类型的valueOf方法参数如果是-128~127之间的值会直接返回内部缓存池中已经存在对象的引用,其他范围则为新建的对象。而 Double 类型与 Integer 类型类似,一样会调用 Double 的 valueOf 方法,但是 Double 的区别在于不管传入的参数值是多少都会 new 一个对象来表达该数值(因为在指定范围内浮点型数据个数是不确定的,整型等个数是确定的,所以可以 Cache)。

注意:Integer、Short、Byte、Character、Long 的 valueOf 方法实现类似,而 Double 和 Float 比较特殊,每次返回新包装对象,对于两边都是包装类型的比较 == 比较的是引用,equals 比较的是值,对于两边有一边是表达式(包含算数运算)则 == 比较的是数值(自动触发拆箱过程),对于包装类型 equals 方法不会进行类型转换。

数组

    数组定义的时候不能指定数组长度

    数组必须被初始化,才能使用。初始化分为两种,静态初始化和动态初始化。数组在初始化的时候如果没有指定初始值,会默认赋予初始值。

静态初始化:arrayName= new type[]{element1,element2,....}

动态初始化:arrayName= new type[length]

字符串

    String不可变类,一旦一个String对象被创建后,包含的字符序列是不可改变的,直到对象被销毁。而StringBuffer和StringBuilder则代表字符序列可变的字符串

枚举

    在某些情况下,一个类的对象是有限而且固定的,实例有限而且固定的类,被称为枚举。使用enum定义,非抽象的枚举类会默认使用final修饰,因此枚举不能派生子类。

内存分析

    基本类型只存放到栈内存中,而引用类型变量在栈内存中存放其在堆内存中的地址,在堆内存中则存放其真实内容。

当基本类型和引用类型均被当做局部成员的时候,内存占用情况如下


从底层说Java中没有多维数组概念。

        

总结

    数据类型是很基础的内容,同样也很重要。尤其是内存的分配!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mandy_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值