第三章ADT+OOP概念的整理与理解

第三章的概念比较多,有些对于本人来说理解起来有些难度,所以对于一些概念进行整理

基本数据类型和对象数据类型

基本数据类型是指int, long, byte, short, char,float, double, boolean等数据类型,用于对数据的内容的表示,本身并非对象,也就是只有值,而没有ID,只能被引用和其他的变量结合在一起才有意义,是immutable也就是不可变的,意思是说每个赋值都是独特的区域,比如两个变量都赋值1,改变一个另一个并不会很随着改变,在运行时在栈中进行存储,运行完毕即可释放,相对代价比较低;对比对象数据类型,Classes, interfaces, arrays, enums,annotations既有ID也有值,也就是该对象本身就是有意义的一块,存储在内存的堆中,但由于每个对象都是独自的,同时存储在堆中,所以想对的成本较高。基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的(需要java中的栈、堆概念),因此分析string类型其实是对象数据类型,string在java中是其实是一个类。
对于基本数据类型来说可以包装成对象数据类型进行查看和存储,主要在容器类中进行使用,这种情况下两种数据类型可以进行相互的转化。

动态检查与静态检查

首先了解动态类型语言和静态类型语言的概念
动态类型语言:在运行阶段进行类型检查的语言
静态类型语言:在编译阶段进行类型检查的语言
动态类型检查:程序运行时发现的问题
静态类型检查:程序在运行之前发现的问题
对于发现一个bug来说的话一般静态类型语言会好于动态类型语言好于无检查的语言。

Mutability(不变性) and Immutability

改变一个变量和改变一个变量的值的区别:
改变一个变量:把变量指向另一个存储空间,相当于内存中的位置发生了改变,并且指向的值也相应的自然发生改变。
改变一个变量的值:变量的在内存中的存储地点不发生改变,只改变该存储地点所存放的值
不变性:一旦创建则不能发生改变,也就是创建之后,该对象在内存中的地点不会再发生改变,同时该地点所存放的值也不会再发生改变,如果要对该对象进行操作的话不被允许,只能通过开辟一块新的内存空间存放该值(在snapshot图中会有区分)通过添加final来实现不可变的要求
可变对象:可以改变对象的值,改变内存所指向的对象和值(在有多个对象有相同的引用时候会容易出问题)
可变类型的使用主要可以节省空间,提升代码的效率,避免出现大量的拷贝,但是当多个变量指向一个可变对象的时候,通过一个变量改变可变对象就会导致别的对象所指向的对象一起发生改变,从而导致出现问题。
对上述的不变性和可变对象进行自己的理解:内存中是存放的变量,在堆中存放着对象,内存中的变量指向堆中的对象,如果是不可变的话堆中的对象是不变的,转为新建一个对象进行相应的操作,然后变量指向该对象。当时可变的话不改变内存的指向,直接改变对象的内容。
对于一个不可变类型为了减少错误发生的情况可采用防御式拷贝的方式+防止表示暴露,防御式拷贝主要在return的阶段不直接返回对象,而是return一个new的对象,放置对象一起变化,导致程序出错。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值