数据类型和数据检验

本文探讨了编程中静态与动态类型检查的区别,强调了不可变性在编程中的重要性,以及它们如何影响程序的安全性和性能。静态类型语言如Java在编译时进行类型检查,而动态类型语言如Python则在运行时检查。不可变数据类型提供安全性但可能导致额外的内存开销,而可变类型则有利于性能优化但需谨慎处理共享数据。此外,文章通过快照图解释了如何表示不可变与可变对象的状态,并指出不可变引用可能指向可变值,反之亦然。
摘要由CSDN通过智能技术生成

编程中的数据类型

对象类型之间形成层次结构(继承关系)

静态 / 动态类型检查

静态类型语言:在编译阶段进行类型检查,如Java
动态类型语言:在运行阶段进行类型检查,如Python

静态>>动态>>无检查

静态 / 动态检查

静态检查主要检查语法错误、类名/函数名错误、参数数目及类型错误、返回值类型错误等。
动态检查主要检查非法的参数值/返回值、越界及空指针等。

静态检查:关于“类型”的检查,不考虑值

动态检查:关于“值”的检查

不可变性(inmutability) 与可变性(mutablity)
不可变性(inmutablity):

重要设计原则,更安全
不可变数据类型一旦被创建,其值不可改变
尽量使用final变量作为方法的输入参数和局部变量
如果编译器无法确定final变量不会改变,就提示错误,这也是静态类型检查的一部分
使用不可变类型,对其频繁修改会产生大量的临时拷贝(需要垃圾回收)

可变性(mutability):

值可修改
可变类型最少化拷贝以提高效率,更好的性能
适合于在多个模块之间共享数据
考虑安全需进行防御式拷贝

具体例子:

见ppt chapter 4 p31 

快照图(Snapshot Diagram)
描述程序运行时内部状态
便于程序员之间的交流
便于刻画各类变量随时间变化
便于解释设计思路
基本类型的画法


对象类型的画法
双线/单线椭圆——不可变/可变对象(String与StringBuilder)
双线/单线箭头——不可变/可变引用


注意:

不可变的引用其指向的值却可以是可变的;
可变的引用,也可指向不可变的值。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值