2021-05-25-基本类型和包装类型
绪论
今天同学面试,聊到了基本类型和包装类型,我心中一惊,区别在哪。我觉得有必要思考一下两种类型的异同点,以及应用场景。
Java中数据类型分为基本数据类型和引用类型:
- 基本数据类型: 数字、字符、布尔
- 引用数据类型:类、接口、数组、枚举、注解、字符串
基本数据类型和引用数据类型的区别
-
1.存储位置
一般而言,基本数据类型是存储在栈中的,引用数据类型则是存储在堆内存中,栈中存放的是 其具体内容所在内存的地址。
-
2.传递方式
- 基本数据类型:在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递的
- 引用数据类型:调用方法时作为参数传递是引用传递,传递是引用的副本
java中只有值传递,其意思是以上两种调用,一种是数值,一种是实参地址。当然判断是值传递还是引用传递的标准,和传递参数的类型是没有一毛钱关系的。
例1 : 方法参数为基本数据类型,方法作用是修改该值,类型为void,实参不发生变化,因为传递的是实参副本
例2 : 方法参数为引用数据类型,比如讲一个类的实例作为参数传递进去(未创建新对象),方法操作的形参指向的内存区域和实参指向内存区域一致,实参也会发生变化
例3 : 方法参数为包装类或String(创建新对象),传递参数是引用类型,并不代表就是引用传递,其实它还是值传递。
在函数中,只有修改了实参所指向的对象内容,才会影响到实参。
当然,以上并不是本文的核心。
这里笔者要思考的有两点,Java的基本数据类型和包装类的诞生场景,为什么有基本数据类型,还要设计包装类。
基本数据类型和包装类
每种基本数据类型基本都有对应的包装类,并且两种类型遵循着自动拆箱和自动装箱的规则。
从浅层次理解的话,基本数据类型不具备面向对象的特性,因此在java这个面向对象的语言中,为之提供了包装类。
- 装箱和拆箱
- (静态方法)valueOf(基本数据类型、字符串): 返回包装类 自动装箱
- (静态方法)parseXXX(字符串) : 返回包装类
- (非静态方法)XXXvalue( ) : 包装类转化为基本数据类型 自动拆箱
值得注意的是,小数的表示常存在丢失精度的问题,比如小数位含3的(原因是数在计算机中以二进制表示)
拓展思考:为什么编程语言需要基本数据类型
纵观现存的大部分编程语言,其数据类型基本都包括数字和字符,当然有些也有布尔类型。
在此,我们可以猜测,在编程世界中,数字是用来计算的最关键元素,这是最基础的。字符数据类型的存在则是与现实世界相关,我们人类的交流沟通还是依赖于文字的。(所以编程世界的基础是数学与语文?)
布尔类型则是非真即假,其判断效率比之数字和字符更高。
数值类型又分为好几种,常见的如短整型,整型,长整型,浮点型,双精度浮点型。划分的原因也很容易理解,数据是存储在设备中的,其在内存中所占据的字节不一样,字节数越大,占用空间越多。
假如说不作区分,用一种类型存储所有数字,那比较小的数值本可以使用更小的空间完成存储,在这种前提下却占据了过大的空间,德不配位有木有!
假如说,现实世界的交互可以只依赖数字的话,我会选择去除编程语言中的字符类型。
- 点赞
- 收藏
- 关注作者
评论(0)