#日常唠叨1#最近小区老是停电,让我怀疑人生。从今天开始应该可以回到之前的节奏
#日常唠叨2#上一篇博客写过了,从今天起两天又来理论了,大家稳住,两天之后就有代码
方便编程的工具有了,现在我们万事具备,可以开始深入Java了。
我们要接触的第一个概念,是数据类型。什么是数据类型呢?就是数据的类型呗(说了和白说一样)。那数据是啥?从计算机科学的角度来说,数据就是信息,我们的计算机是围绕这个信息,也就是数据展开的。我不举其他角度的例子了,说太多怕你们绕。也就是,数据即是我们程序的核心,没有数据就没有程序。
为了区分几个数据之中的不同,出现了数据类型这个概念。有了数据类型,程序就可以转管专治,针对不同数据类型的数据进行不同的处理。
在Java中,数据类型分为基本数据类型和引用数据类型。基本数据类型分为整型(整数型)、浮点型(小数型)、字符型、布尔型,引用数据类型分为类、接口、枚举、数组。
引用数据类型不是我们的重点,关于引用数据类型我们后面会细写。这里我们只要关注一下基本数据类型。
首先我们说说整型,整型是数据内容为整数的数据的类型。整型又分为4种类型,分别是byte、short、int、long(大型编程语言就是这么麻烦)。这些不同的4种类型都可以用来表示整数数据,但是它们有表数范围的区别(即,占用存储空间的区别),下面这张表是各个类型的占用存储空间的大小和表数范围:
数据类型 | 占用存储空间 | 表数范围 |
byte | 1字节 | -128~127 |
short | 2字节 | -32768~32767 |
int | 4字节 | -2147483648~2147483647 |
long | 8字节 | -263~(263-1) |
为啥表数范围的正数全部比负数小一?因为还有一个0呢。通常情况下,我们都使用int类型作为整型的默认类型,虽然有时我们不需要这么大的表数范围。Java内置也赞同了这一点,于是将整型的默认类型设置为了int(也就是说,我在Java中随便打一个整数,这个整数就是int类型),但是如果我们要用其他类型怎么办?如果要用byte和short,没有任何关系,因为int可以直接向下转型为byte和short(关于转型这件事,我们后面会写),但是如果用long类型呢?那就需要使用尾标,通过在整数后面增加一个L来实现(注意:这里不要用小写的L,因为小写的L很像数字1和字母i的大写,关于L问题我们后面会写)。比如 123 是一个int类型的数据, 123L 则是一个long类型的数据。
有些人要问了,我要用整型来表示一个比(263-1)还要大的数怎么办?Java中提供了一个叫做BigInteger的类,它可以表示比long更大的整数,但这是后话了(BigInteger类在后面会写)。
在Java中,整数可以用4种进制来表达,分别是2进制、8进制、10进制、16进制。通过在整数前面加上0b(或ob),即证明你打的数是2进制整数,8进制在前面加0,10进制啥也不用,16进制在前面加0x或ox。
说完整型,现在我们来聊聊另一个用来表示数字的类型——浮点型,浮点型是数据内容为小数的数据的类型。浮点型还好,只分成两种类型,float和double。他们的区别和整型一样,只是表数范围(占用存储空间)大小不一样而已:
数据类型 | 占用存储空间 | 表数范围 |
float | 4字节 | -3.403e38~3.403e38 |
double | 8字节 | -1.798e308~1.798e308 |
学过数学的应该知道,小数点后面是可以写无限位的,所以浮点型只是进行一次粗略的估算,会出现误差。float类型尾数只能精确到的7位有效数字,被称为单精度小数。而double类型的精度说float的两倍,所以又叫双精度小数(double英文的本意就是双倍,不知道大家有没有听说过这个词:double kill)。Java浮点型默认为double类型,如果要用float需要在后面加上尾标f或者F(个人推荐用大写F),比如3.14是double类型,而3.14F是float类型(这边插一句,在小数后面加上d或D可以表示小数为double类型,虽然没有意义,但是要知道)。
小数是如此不精确,所以我们要避免使用小数,如果真的要进行严格的小数运算,可以使用BigDecimal类(同样这个后面会写)。
Java中的小数有两种表示方法,一种是正常小数,一种是科学计数法小数。都直接打就行,不用写特殊标注。关于科学计数法大家应该知道,比如3.14e2就是3.14×102=314,3.14e-2就是3.14×10-2=0.0314。