数据类型与类型检验

数据类型与类型检验

1.数据类型

基本数据类型(java有八种基本数据类型)(栈中分配内存,不可变)

对象数据类型:对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性。(堆中分配内存,可变/不可变)

可以将基本数据类型包装为对象数据类型进行使用(如Integer)。

2.操作

操作符可以进行重载来改变一些操作符的作用。

操作可以分为method(方法)和function(功能),区别在于方法是对对象名字进行调用,而功能作为静态方法是属于一个类的,使用类的名字进行调用。

3.数据类型检查

类型转换:每个函数都可以强制将一个表达式转换成某种特定数据类型。自动类型转换不会导致数据丢失。

静态类型检查:在程序运行之前进行检查,在编码时就对类型进行推断。如java作为一款静态类型语言,所有的变量类型在编译时就是已知的,编译器可直接判断表达式的结果类型。关于类型的检查。

动态类型检查:在程序运行时进行检查。如python的变量类型就不是已知的,需要在运行的时候进行类型检查确认。关于值的检查。

静态检查相对于动态检查更加优异可以检查出更多的错误,更加安全,避免将错误带入运行阶段。

注:不是静态类型语言就没有动态检查同样动态类型语言也可以支持静态检查,只不过检查的方式可能不同。

静态类型检查错误示例:语法错误,类名/函数名错误,参数数目错误,参数类型错误,返回值类型错误。

动态类型检查错误示例:非法参数值,非法返回值,越界,空指针。

4.可变类型,不可变类型

赋值方面:不可变类型在改变他的值是不会改变存储空间的值,而是将其指向一个新的空间,这个空间中存储着新的值。而可变数据类型会将这个空间里的值改变,而不是指向新的存储空间,这样虽然会节省空间但会产生一些特殊的错误。

特殊的引用类型也可以是不可变类型,也就是指向一个对象就不能再被指向其他的对象。

final关键字可以将一个对象定义为不可变类型。

不变对象:被创建后不能改变值。

可变对象:被创建后可以改变值。

防御式拷贝:防御式拷贝的目的是为了消除可变数据类型带来的表示泄露。但是可能造成大量的内存浪费。

posted @   Gusimo22  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示