对Java是否是一门纯面向对象编程语言一直以来都存在争议,因为在Java中还存在像基本数据类型、静态变量、静态方法这样的非面向对象特性。
在Java中一切皆是对象,除了基本数据类型。之所以这样设计,主要是为了提高效率(对像基本数据类型这样简单而又经常使用的变量创建变量会比较低效),所以Java对基本数据类型采用了C、C++相同的方式来处理,就是变量直接存储“值”,而不是对象引用。
在Java中有8种基本数据类型,它们分别是byte、char、short、int、long、float、double、boolean,这些数据都对应的包装数据类型,分别是Byte、Character、Short、Integer、Long、Float、Double、Boolean,这些包装数据类型就是基本数据类型对应的类,它们的变量存储的都是对象的引用而不再是“值”。
- btye
byte占用1个字节(也就是8个bit位),所以它的范围就是-128~127 - char
char占用2个字节,采用Unicode编码,最小值是’\u0000’(0),最大值是’\uffff’(65,535) - short
short占用2个字节,它能表示的数值范围是-2 - int
int占用4个字节,它能表示的数值范围是-2 - long
long占用8个字节,它能表示的数值范围是 - float
float占用4个字节,范围是
注:float在进行数值运算时不是精确运算,比如
public class Main {
public static void main(String args[]) {
float f1 = 0.3456121234123123f;
float f2 = 0.3456121f;
if (f1-f2==0f) {
System.out.println("f1==f2");
} else {
System.out.println("f1!=f2");
}
}
}
它的输出结果并不是f1!=f2,而是f1==f2。
当需要对浮点数进行精确运算时我们应该使用java.math.BigDecimal 类,而不是float,对double也是一样
- double
double占用8个字节,范围是
和float一样,对double进行数值运算时也不是精确运算,当我们需要精确运算时应当选择java.math.BigDecimal 类 - boolean
boolean类型只有true和false两个值,它主要用来标记逻辑判断,它占用的空间大小没有精确定义