2021-05-25-基本类型和包装类型

举报
去休 发表于 2021/06/04 17:44:34 2021/06/04
【摘要】 绪论今天同学面试,聊到了基本类型和包装类型,我心中一惊,区别在哪。我觉得有必要思考一下两种类型的异同点,以及应用场景。Java中数据类型分为基本数据类型和引用类型:基本数据类型: 数字、字符、布尔引用数据类型:类、接口、数组、枚举、注解、字符串 基本数据类型和引用数据类型的区别1.存储位置一般而言,基本数据类型是存储在栈中的,引用数据类型则是存储在堆内存中,栈中存放的是 其具体内容所在内存...

绪论

今天同学面试,聊到了基本类型和包装类型,我心中一惊,区别在哪。我觉得有必要思考一下两种类型的异同点,以及应用场景。

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

  • 基本数据类型: 数字、字符、布尔
  • 引用数据类型:类、接口、数组、枚举、注解、字符串

基本数据类型和引用数据类型的区别

  • 1.存储位置

    一般而言,基本数据类型是存储在栈中的,引用数据类型则是存储在堆内存中,栈中存放的是 其具体内容所在内存的地址。

  • 2.传递方式

    • 基本数据类型:在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递
    • 引用数据类型:调用方法时作为参数传递是引用传递,传递是引用的副本

java中只有值传递,其意思是以上两种调用,一种是数值,一种是实参地址。当然判断是值传递还是引用传递的标准,和传递参数的类型是没有一毛钱关系的。

例1 : 方法参数为基本数据类型,方法作用是修改该值,类型为void,实参不发生变化,因为传递的是实参副本

例2 : 方法参数为引用数据类型,比如讲一个类的实例作为参数传递进去(未创建新对象),方法操作的形参指向的内存区域和实参指向内存区域一致,实参也会发生变化

例3 : 方法参数为包装类或String(创建新对象),传递参数是引用类型,并不代表就是引用传递,其实它还是值传递。

在函数中,只有修改了实参所指向的对象内容,才会影响到实参。

当然,以上并不是本文的核心。

这里笔者要思考的有两点,Java的基本数据类型和包装类的诞生场景,为什么有基本数据类型,还要设计包装类。


基本数据类型和包装类

每种基本数据类型基本都有对应的包装类,并且两种类型遵循着自动拆箱和自动装箱的规则。

从浅层次理解的话,基本数据类型不具备面向对象的特性,因此在java这个面向对象的语言中,为之提供了包装类。

  • 装箱和拆箱
    • (静态方法)valueOf(基本数据类型、字符串): 返回包装类 自动装箱
    • (静态方法)parseXXX(字符串) : 返回包装类
    • (非静态方法)XXXvalue( ) : 包装类转化为基本数据类型 自动拆箱

值得注意的是,小数的表示常存在丢失精度的问题,比如小数位含3的(原因是数在计算机中以二进制表示)


拓展思考:为什么编程语言需要基本数据类型

​ 纵观现存的大部分编程语言,其数据类型基本都包括数字和字符,当然有些也有布尔类型。

​ 在此,我们可以猜测,在编程世界中,数字是用来计算的最关键元素,这是最基础的。字符数据类型的存在则是与现实世界相关,我们人类的交流沟通还是依赖于文字的。(所以编程世界的基础是数学与语文?)

​ 布尔类型则是非真即假,其判断效率比之数字和字符更高。

​ 数值类型又分为好几种,常见的如短整型,整型,长整型,浮点型,双精度浮点型。划分的原因也很容易理解,数据是存储在设备中的,其在内存中所占据的字节不一样,字节数越大,占用空间越多。

​ 假如说不作区分,用一种类型存储所有数字,那比较小的数值本可以使用更小的空间完成存储,在这种前提下却占据了过大的空间,德不配位有木有!

​ 假如说,现实世界的交互可以只依赖数字的话,我会选择去除编程语言中的字符类型。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。