在前面我们编写了一个最简单的Java程序,告诉电脑在屏幕上打印“Hello World!”这样一句话。用英文双引号包围起来的一系列符号、一系列字符,在Java中叫做字符串,英文单词是String。字符串很好理解,就是包含一串字符的字符序列。
字符串是一种数据类型。Java除了支持字符串,还支持其他数据类型,比如整数、小数等等。接下来我们一起通过代码来学习这些数据类型。
为了大家对齐学习起点,这里我们统一新创建一个名叫“Data-Types-Demo”的Java工程。创建新工程的主要目的是防止出现代码混乱,不仅会很方便大家后面回顾代码,而且能够保证我与大家对齐代码。
接下来示例一种在IntelliJ IDEA中创建Java工程的新方式。假设现在我们的电脑上打开了前面的HelloWorld工程,如下图,
在左上角有一个处于折叠状态的“汉堡包”菜单按钮,我们点击一下。点击后马上弹窗一个新窗口,
我们继续点击第一项“New”,然后在右边紧接着弹窗出另外一个窗口,
我们仍然点击第一项“Project”。这个时候界面来到我们前面熟悉的新建工程主窗口,
在这里我们给这个新Java工程命名,比如取名为“Data-Types-Demo”。指定好工程文件保存目录后,其他选项保持和前面第一次创建Java工程一样。最后点击一下“Create”按钮。
软件自动打开新工程后,我们仍然先在src目录下添加一个Java源代码文件。大家不妨统一将这个新源文件命名为“DataTypesDemo”。做完这些步骤后的界面如下,
添加新源文件的工程这里省去了一些图示,要是大家遇见困难了,可以回顾一下运行我们的第一个Java程序当时的做法,教程里面有详细的步骤图示。
接下来就到了编写代码的时候,第一步就是添加我们的main方法,
public class DataTypesDemo {
public static void main(String[] args) {
}
}
当教程里面没有特别说明的时候,我们编写的代码都位于main方法后面的花括号中,也就是代码结构里面的第二对花括号。
现在是最好的时机来一边编写代码,一边学习Java中的数据类型新知识点。电脑在发明之初就是用来进行计算的,最早的计算机的功能跟我们现在的高级计算器差不多。我们自然想到Java支持的数据类型就是整数、小数这些。
没错,Java支持的第一类数据类型就是整数。如果我们这样编写代码,
System.out.println(10);
运行这个程序后,屏幕上会显式整数10,
10
这里我们使用“System.out.println()”来打印数字,不再是仅仅打印双引号里面的内容,如“Hello World!”。对于小数呢,如果这样编写代码,
System.out.println(3.14159);
运行这行代码后,屏幕上会显式精确到五位小数的圆周率,
3.14159
同样是整数,Java还细分了不同范围的数据类型。
整数类型
在Java中,整数类型(也常常简称为整型),包含字节类型、短整型、常规整型以及长整型,它们所表示的数值范围逐渐扩大。
第一种字节类型,在内存里面占用8个比特位,可以表示-128到127这个闭区间的所有整数。
public class DataTypesDemo {
public static void main(String[] args) {
System.out.println(10);
System.out.println(3.14159);
// 最小字节型整数-128
System.out.print("最小字节型整数");
System.out.println(-128);
// 最大字节型整数127
System.out.print("最大字节型整数");
System.out.println(127);
}
}
如果大家运行上面这段代码,屏幕上会显式
10
3.14159
最小字节型整数-128
最大字节型整数127
这段代码示例了一些新用法,一是我们可以在代码中多次使用“System.out.println()”,Java程序在运行时会一条命令一条命令地执行。
另外也出现了一个新用法“System.out.print()”,它的作用和“System.out.println()”基本完全一样,只是二者表现效果不同。println()在屏幕上打印完后,会自动换行,相反print()打印完后不换行。
现在继续回到数据类型上面,第二种整数类型是短整型,其在内存里面占用16个比特位,可以表示-32768到32767这个范围的整数。
对于常规整型,在内存里面占用32个比特位,可以表示-231到231-1这个范围的所有整数,也就是从-2,147,483,648到2,147,483,647。因此在Java编程中绝大部分时间会用到常规整型,很少有数值会超过这个量级,毕竟这是一个二十亿左右的数。
对于长整型,其在内存里面占64个比特位,可以表示-263到263-1这个范围的所有整数,也就是-9,223,372,036,854,775,808到9,223,372,036,854,775,807。如果我们需要表示的整数远远超过二十亿这个量级,比如地球上的总人口,这种情况下会使用长整型。
需要注意的是,在字面上如果我们对一个整数不加标识,Java默认其是一个常规整型的数字。
System.out.println(3000000000);
如果我们直接像上面这样编写代码,IntelliJ IDEA会在数字部分用红色下划波浪线提示,将鼠标悬停到标红位置,会弹出小窗口提示“整数过大”。为了区分确实是使用的长整型整数,我们需要在数字末尾添加后缀l(小写字母l)或者L。
System.out.println(3000000000L);
推荐大家使用大写字母L来标识,因为小写字母l在字面上看起来很像数字1。
浮点数类型
浮点数也叫小数,这个称呼是从单词Float直译过来的。在Java中,按照对小数的表示的精度不同,浮点数类型分为单精度浮点数和双精度浮点数。
单精度浮点数在内存中占32个比特位,最高精度只能支持到第八位小数;双精度浮点数在内存中占64位,最高能支持到十七位小数。
仍然需要注意的是,在字面上Java默认将一个小数看作双精度浮点类型。因此为了区分我们确实是想表示一个单精度浮点数,需要添加后缀f或者F。
System.out.println(0.123456789F);
System.out.println(0.12345678901234567890);
如果大家运行上面这段代码,屏幕上会显式
0.12345679
0.12345678901234568
容易看到,在表示单精度浮点数时,Java默认在第八位小数部分进行了四舍五入;同理,在表示双精度浮点数时,程序也在第十七位小数部分进行了四舍五入。
此外,Java也支持用科学计数法表示的浮点数。如果运行下面这段代码,
System.out.println(1e-2);
System.out.println(1e2);
System.out.println(1E-2);
System.out.println(1E2);
我们的屏幕上将会显式
0.01
100.0
0.01
100.0
字符类型
除了支持像整数、小数这样的数值类型,Java也支持字符,相应地也就叫做字符类型。
字符类型在内存里面占16个比特位,可以表示编号为0到65535这个范围的所有字符,也叫做Unicode字符集。
如果想在屏幕上打印字母a,可以这样编写代码
System.out.println('a');
与字符串不同,表示单个字符需要用英文单引号来包围。如果大家好奇Unicode字符集都是哪些字符,可以到这个页面查看。
布尔类型
布尔类型是对单词Bool的直译,可以用来表示逻辑真假值,在内存中会占用8个比特位。在Java中,逻辑真用true表示,反之false则可以用来表示逻辑假。
System.out.println(true);
System.out.println(false);
上面这段代码打印了逻辑真与逻辑假。如果运行这段代码,我们的屏幕上会显式
true
false
需要说明一下,对于字节类型、短整型、常规整型、长整型、单精度浮点类型、双精度浮点类型、字符类型以及布尔类型,这八大数据类型在Java中常常叫做基本类型,这是与字符串以及后面我们会接触的对象等其他数据类型区分。
关于数据类型,本节教程暂时到此为止,后面我们会针对性地学习字符串以及对象。
以下是本节教程的完整代码
public class DataTypesDemo {
public static void main(String[] args) {
System.out.println(10);
System.out.println(3.14159);
// 最小字节型整数-128
System.out.print("最小字节型整数");
System.out.println(-128);
// 最大字节型整数127
System.out.print("最大字节型整数");
System.out.println(127);
// 最小短整型-32768
System.out.print("最小短整型");
System.out.println(-32768);
// 最大短整型32767
System.out.print("最大短整型");
System.out.println(32767);
// 在字面上表示一个长整型需要在数字末尾加上后缀l或者L
System.out.println(3000000000L);
// 单精度浮点数最多只能精确到8位小数
System.out.println(0.123456789F);
// 双精度浮点数最多能精确到17位小数
System.out.println(0.12345678901234567890);
// 用科学计数法表示的小数
System.out.println(1e-2);
System.out.println(1e2);
System.out.println(1E-2);
System.out.println(1E2);
// 字符类型
System.out.println('a');
// 布尔类型
System.out.println(true);
System.out.println(false);
}
}