JAVA的内建类型
数据类型是现代计算机语言中最基本的抽象元素,其定义是:一组值及其定义在其上的操作。如数据类型16位无符号数,可以定义为0到65535及施加于其上的加法和减法操作。
JAVA中共有8种内建数据类型,绝大部分都和数字有关,这里介绍常用的类型,对JAVA的基本类型及操作有个感性认知。
整形(int),表示-2的31次方到2的31次方-1之间的整数。应该是现实中最常用到的数学概念。如果你觉得范围还不够,长整形(long)提供了64位的长度。其他还有byte和short两个整形类型。
int a, b, c; //声明名字为a,b,c的类型为int的变量 a = 1234; //a赋值为1234 b = 99; //b赋值为99 c = a + b; //c的值为a和b的加法运算结果
声明在计算机语言中,只是告诉编译器这有一个符号,可以先认为他存在。直到定义的时候,它才真正在在内存占据一席之地。上例中,程序运行到到赋值操作以后,才会在内存中为a,b,c分配32或者64个bit的内存,在这之前,内存不存在他们的实体。整形的操作见下面的程序。
# java IntOps 1234 99 public class IntOps { public static void main(String[] args) { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); int sum = a + b; int prod = a * b; int quot = a / b; int rem = a % b; System.out.println(a + " + " + b + " = " + sum); System.out.println(a + " * " + b + " = " + prod); System.out.println(a + " / " + b + " = " + quot); System.out.println(a + " % " + b + " = " + rem); System.out.println(a + " = " + quot + " * " + b + " + " + rem); } }
字符(char)类型表示一个字符,包括字母和数字。
String是指一组有序的字符。更常用是String类型,见下面的例子
String a, b, c; //声明名字为a,b,c的类型为String的变量 a = "Hello,"; //a赋值为 Hello, b = " Bob"; //b赋值为 空格Bob c = a + b; //c赋值为a和b的连接操作
实数,双精度浮点数(double),内部的表示方法是科学记数法,下面的例子演示了double的相关操作,其中Math是JAVA中的一个库,定义了很多数学操作。除了双精度,还有单精度,float类型。
想要查看JAVA中每一个类型的取值范围,可以写一个下面的程序。
到底用那种类型呢?当然是根据需求了,如果你无法预测,就不要预测了,用一个现在看来够用的就可以了。做一个刚刚好的系统并在未来的需求变化下快速重构,才是目前大型软件工程的不二法门。
/* The Max value of int: 2147483647 The Min value of int: -2147483648 The Max value of long: 9223372036854775807 The Min value of long: -9223372036854775808 The Max value of float: 3.4028235E38 The Min value of float: 1.4E-45 The Max value of double: 1.7976931348623157E308 The Min value of double: 4.9E-324 */
public class OutputMaxMin { public static void main(String[] args) { System.out.println("The Max value of int: " + Integer.MAX_VALUE); System.out.println("The Min value of int: " + Integer.MIN_VALUE); System.out.println("The Max value of long: " + Long.MAX_VALUE); System.out.println("The Min value of long: " + Long.MIN_VALUE); System.out.println("The Max value of float: " + Float.MAX_VALUE); System.out.println("The Min value of float: " + Float.MIN_VALUE); System.out.println("The Max value of double: " + Double.MAX_VALUE); System.out.println("The Min value of double: " + Double.MIN_VALUE); } }
布尔值(booleans),布尔值取值范围就两个值,真(true)或假(false)。其运算包括与,或,非。
可以结合基本的比较运算来看一下布尔值的运用。
操作 | 意义 | true | false |
---|---|---|---|
== | 是否相等,相等为真 | 2 == 2 | 3 == 2 |
!= | 是否不等,不等为真 | 3 != 2 | 2 != 2 |
< | 是否小于,小于为真 | 2 < 13 | 2 < 2 |
<= | 是否小于等于,小等于为真 | 2 <= 2 | 3 <= 2 |
> | 是否大于,大于为真 | 13 > 2 | 2 > 13 |
>= | 是否大于等于,大于等于为真 | 3 >= 2 | 2 >= 3 |
为什么只有这几种内建数据类型呢,为什么不多一点呢?为什么不少一点呢?
每一种计算机语言是人设计的,自然就有他的目标。没有完美的产品,只有完成你目标的合适的产品。就像一辆汽车,没有操控,油耗,空间,外形都满分的汽车,只能根据目标来设计一辆或操控好,或空间大,或中庸的汽车。语言也是一样,一提到网络爬虫,首先想到Python,一提到网页设计,可能首先想到PHP。对于JAVA来说,其最初的设计目标之一是简单的,面向对象的,熟悉的。支持面向对象就是你可以使用JAVA实现自己的数据类型。简单就是内存管理等等一系列细节JAVA都帮你封装好了,而熟悉,应该就是跟C语言等当时的常用语言看起来差不多。所以提供最基本的,和C语言相似的基本类型,以便构造自己的数据类型就可以了,如果你想要更多的,自己可以构造。
抽象
回到最初说的抽象,可以说是软件工程师的基本能力。什么是抽象,就是忽略细节,抓取本质。在数据类型这个抽象中,你不需要时时都去关心int类型变量在计算机中如何表示,符号位是否是1,加法运算如何在CPU中完成,你只需要关心它的本质,有符号数及其数学运算。
本人水平有限,但是欢迎指正交流。
如果你觉得有点意思,欢迎关注 悟空的小车库。