Java数据类型简要梳理

        Java语言中的数据类型分为两大类,分别是基本类型和对象类型。基本类型包括“byte、short、int、long、float、double、char、boolean”,而对象类型是其他的类型。对于基本类型只有值,无法与其他的同类进行区分,本身不可变,程序运行时存储在栈中,创建代价低。而对象类型除了值以外还有单独的身份,同类之间可以进行区分。本身有的可变有的不可变,程序运行时在堆中分配内存,相对创建代价高。所有类全部都是object的子类,而没有声明父类的类父类会直接默认为object。

        基本类型全部是不可变类型,而对象类型有的可变有的不可变。可变与不可变指的是变量的值能否改变,即变量指向的值的存储空间内部保存的数据能否改变。不可变类型指向的存储空间的值不能改变,在改变值的时候会改变指向,指向新值的存储地址。与之相对的是引用不可变,引用不可变的变量指向的地址不会改变,而指向地址的值有可能可以改变。可变与不可变用mutible和immutible定义,而不能改引用的用final声明。

        java是静态类型语言,其中对于变量类型的声明在编译阶段就已经确定了,而类型检查在静态和动态都有。静态类型检查是在编译阶段进行的,在编译阶段检查是否有类型引用错误,参数类型数目,语法错误等,目的是不把错误带进运行中。动态类型检查是在运行中检查是否有访问越界,非法返回,空指针之类。

        对于不可变类型和可变类型,两者各有优劣。不可变类型由于指向地址的值不能改变,在运行中可能会产生大量的数据拷贝,是一种空间的损失。因此如果遇到需要经常改变的变量最好使用可变类型,在操作上更加方便并且能够节省空间。但是相对的,不可变类型由于引用地址的值不能改变,因此会更加安全,在多线程之类过程中,以及被函数返回时不用担心变量的内容会被修改。不过此处的安全也是相对的,有的存储内容比如密码,使用可变类型传递可以在使用过后对其直接进行销毁,而不可变类型在修改后原来的数据还会短暂的保存在内存中,因此相对而言又不够安全。我们在对可变类型进行引用或返回的时候,最好使用防御式拷贝,创建一个同类对象后返回新对象,这样可以防止直接传出可变对象使得值被篡改。对于一些常用的数据类型例如ArrayList,他们本身是可变的,因此在使用时应当注意防御式拷贝,不要直接返回。如果需要让他们变成不可变的,可以使用包装器定义不可变的相同内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值