44

Java基础系列1:Java基本类型与封装类型

 4 years ago
source link: http://wangjinlong.xyz/2020/02/01/java-basics-1-java-type/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

当初学习计算机的时候,教科书中对程序的定义是:程序=数据结构+算法,Java基础系列第一篇就聊聊Java中的数据类型。

本篇聊Java数据类型主要包括两个内容:

  • Java基本类型
  • Java封装类型

Java基本类型

Java基本类型分类、大小及表示范围

Java的基本数据类型总共有8种,包括三类:数值型,字符型,布尔型,其中

  • 数值型:
    • 整数类型:byte、short、int、long
    • 浮点类型:float、double
  • 字符型:char
  • 布尔型:boolean

字符类型在内存中占有2个字节,可以用来保存英文字母等字符。计算机处理字符类型时,是把这些字符当成不同的整数来看待,即ASKII码,因此,严格来说,字符类型也算是整数类型的一种。

Java的这8种基本类型的大小,即所占用的存储字节数,以及可以表示的数据范围如下表所示:

NnYfeia.png!web

Java基本类型之间的转换

Java是强类型的编程语言,其数据类型在定义时就已经确定了,因此不能随意转换成其他的数据类型,但是Java允许将一种类型赋值给另一种类型。

在Java中, boolean类型与其他7种类型的数据都不能进行转换 ,这一点很明确。

但对于其他7种数据类型,它们之间都可以进行转换,只是可能会存在精度损失或其他一些变化。转换分为自动转换和强制转换:

  • 自动类型转换(隐式):无需任何操作
  • 强制类型转换(显式):需使用转换操作符

自动类型转换需要满足如下两个条件:

  1. 转换前的数据类型与转换后的数据类型兼容;
  2. 转换后的数据类型的表示范围比转换前的类型大。

如果将6种数值类型作如下排序:

double > float > long > int > short > byte

那么从小转换到大,那么可以直接转换,而从大到小,或char或其他6种数据类型转换,则必须使用强制转换,且可能会发生精度损失。

Java基本数据类型的默认值

在某些场景下,比如在Restful API接口中,如果在dto中使用了基本类型的参数,那么即使请求体中没有传该参数,服务器在做反序列化的时候也会将该参数以默认值来处理。所以在实际开发的dto中务必不要使用基本类型。

以下是Java基本数据类型的默认值:

auE3iqq.png!web

Java封装类型

对于上面的8种基本类型,Java都有对应的封装类型:

基本类型 byte int short float double long boolean char 封装类型 Byte Integer Short Float Double Long Boolean Character

基本类型 vs 封装类型

Java封装类型与基本类型相比,有如下区别:

  1. 从参数传递上来说,基本类型只能按值传递,而每个封装类都是按引用传递的;
  2. 从存储的位置上来说,基本类型是存储在栈中的,而所有的对象都是在堆上创建和存储的,所以基本类型的存取速度要快于在堆中的封装类型的实例对象;JDK5.0开始可以自动封包了 ,也就是基本数据可以自动封装成封装类,基本数据类型的好处就是速度快(不涉及到对象的构造和回收),封装类的目的主要是更好的处理数据之间的转换,方法很多,用起来也方便。
  3. 基本类型的优势是:数据存储相对简单,运算效率比较高;
  4. 封装类型的优势是:类型转换的api更好用了,比如Integer.parseInt(*)等的,每个封装类型都提供了parseXXX方法和toString方法。而且在集合当中,也只能使用封装类型。封装类型满足了Java中一切皆对象的原则。

下一篇,将介绍Java类型中的自动拆箱与封箱,以及缓存机制。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK