软件构造:软件中的数据类型

    java是软件构造中经常使用的一门语言,在java语法中数据分为了基本数据类型和对象数据类型,对象数据类型中又包括了可变数据类型(mutable)和不可变数据类型(immutable)。这几种数据类型所具有的性质差异巨大,在应用时稍有不慎就会“收获”意料之外的bug。因此了解java中不同数据类型的特性就显得异常重要。下面,我来依次介绍一下java中常见的数据类型。

1.基本数据类型:

    基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型。它们是我们编程中使用最频繁的类型。java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为变量的初始化。Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。

    这一类类型的数据只有值没有ID,也就是说这些数据没法与相同数值的数据进行区分,同时编译后这些数据会被存储在栈中。因为基本数据类型没有方法,因此创建使用基本数据类型的数据时花费的代价较小。

2.对象数据类型:

    对象数据类型是Java区别于C语言的不同之一,在定义时,基本数据类型由小写字母定义,而对象数据类型由首字母大写定义。对象可以在其中定义很多方法。StringBuilder、Map、List<L>等都是对象数据类型。

    这一类类型的数据既有ID也有值,因此可以与其他值区分。同时,这一类数据类型是区分immutable和mutable的。另外,由于这一类数据类型的数据包含方法因此创建使用的花费较大存储在堆中。

3.不可变数据类型(immutable):

    不可变数据类型是指一旦被创建,其值就不能被改变的数据类型。这里的值不能改变并不是绝对的不能改变。一般来讲可以通过创建全新的数据并赋值给原来的变量就可以达到改变不可变数据类型变量的数据的功能。但是原来创建的数据并没有被删除,依然存储在内存之中,同时并没有被改变。因此,该类数据类型被称之为不可变数据类型。在自己构建代码的过程中,可以通过在变量声明中添加final关键字来获得immutable的效果。在final的修饰下,变量只能在创建是被赋值,在之后如果遇到赋值语句java就会返回报错。通过这种方式我们可以构建一个immutable的类。

4.可变数据类型(mutable):

    数据类型中的值可以改变的类型成为可变数据类型,可变类型因为最少化拷贝,可以提高效率,使用可变数据类型,可以获得更好的性能,也适合于在多个模块之间共享数据。这里需要注意的是,对于指向同一条可变数据类型数据的变量来说,任意一个变量的赋值改变会影响全部变量的值。也就是说改变了存储数据的内存中的值。而不可变数据类型没有这一种特性。这种特性经常会导致数据类的rep泄露。我们可以通过防御式拷贝来防止这一现象的发生。防御式拷贝是指,在我们需要返回一个mutable类型数据时,通过新建一份相同的全新的mutable数据来返回,对数据进行备份。这样,无论客户端中对返回的数据做何修改,都不会对类中的mutable数据产生任何影响。以此避免危险与bug。

    另外,对于像list,set,map这一类可变的数据包装器,我们可以通过添加Collections.unmodifiableList、Collections.unmodifiableSet、Collections.unmodifiableMap等不可变包装器来包装成一个不可变数据类型,这种包装器返回的结果是只读的,任何对该数据的修改都会引起报错。

    以上便是java中的几种数据类型分类。掌握并合理应用这些数据类型的特性,避免bug是我们每一个计算机人应该掌握的重要技能之一。

 

posted @ 2022-06-12 22:15  马子涵  阅读(338)  评论(0)    收藏  举报