数据类型
数据类型是学习编程无法绕开的一个知识点,对于初学编程的人来说可能很难或者说很难理解。其实在学习过程中我们很容易忽视一个问题,为什么使用数据类型?
不知道大家在初次接触编程的时候有没有考虑过这个问题,至少当年我想过,只是没有想明白而已。当然这么多年过去了,对这个问题我有了自己的理解,下面容我阐述一二
当计算机运行时数据肯定是需要有地方存储的,而常见的存储设备一共有两个硬盘和内存条,而由于一些列的原因硬盘的读写速度无法和内存相媲美,所以解决方案为硬盘存储永久性的数据,而内存存储临时性数据。
程序运行肯定会产生一些临时性的数据,这些数据的存储位置毫无疑问的是内存条,所以我们抛开硬盘不谈,单独聊一下内存条。我们知道内存的容量并不是无上限的,那么如何合理的使用这个有限的空间就成了一个问题,而数据类型的引入只是解决这个问题的办法之一
在编程语言中针对数据类型存在两种分类弱类型和强类型,关于常见语言关于类型的分类有一张图
Java很明显是属于强类型语言的,在这里我并不是要规避什么问题,如果想要彻底搞明白这些问题我们可能还需要学习一下编译原理,但这个暂时不是我们的讨论内容
# Java中的数据类型
我们作为初学者在这里其实并不需要刻意的去记忆什么,仅仅是对即将学习的类型在内心有一个印象即可,关于类型的分类情况如下图所示
# 基本数据类型
基本数据类型,也称内置类型,是可以在栈直接分配内存的,Java保留基本数据类型最大的原因也在此。
Java是基于JVM的,所以,其所占字节固定,与机器平台无关,所有地方统一占用内存大小(除了boolean,以及byte、short、boolean数组的时候每个单元所占的内存是由各个JVM自己实现的)
# 类型转换
类型转换是我们应该尽力避免出现的情况,当然在避无可避的时候我们还是需要的。
转换规则:
自动转换:取值范围(表数范围)小的向取值范围大的数据类型转换,Java能实现自动转换
强制转换:取值范围大的向取值范围小的转换,需要强制转换,强制转换容易出现精度丢失
注意事项:
boolean不参与类型转换
byte、short、char如果转换的需要先转成int然后再转
# 引用数据类型
也称对象变量类型(其实我更喜欢称为自定义数据类型),复合数据类型,包含类、接口、数组(除了基本类型外,就是引用类型)。
//基本数据类型
int a = 5;
//引用数据类型
Object o = new Object();
2
3
4
5
6
我不知道如何怎么表达二者的区别,只能通过代码来进行描述
聊引用数据类型不可避免的需要说到对象,但这个话题在此处说起很明显超纲了
# 最后
很多人说Java没有指针,而指针则是C语言的灵魂。其实我不是太认同,对象的引用,其实质同指针一样(可以理解为受限制的指针),存放的是一个地址,至于是实例对象的地址,还是一个指向句柄池的地址则完全是看各个JVM的实现了