Java 的四类八种基本类型
Java 为我们提供了四类八种基本数据类型,如下表所示:
基本类型 | 包装类 | 包含 | 大小 | 范围 | |||
类型名 | 默认值 | 类型名 | 默认值 | ||||
逻辑型 | boolean | false | Boolean | null | true 或 false | 1位 | ~ |
字符型 | char | /uxxxx | Character | null | Unicode 字符 | 16位 | /u0000 ~ /uffff |
整型 | byte | 0 | Byte | null | 有符号整数 | 8位 | -127 ~ 127 |
short | 0 | Short | null | 有符号整数 | 16位 | -32768 ~ 32768 | |
int | 0 | Integer | null | 有符号整数 | 32位 | -214783648 ~ 214783648 | |
long | 0 | Long | null | 有符号整数 | 64位 | -9223372036854775808 ~ 9223372036854775808 | |
浮点型 | float | 0.0 | Float | null | IEEE符点 | 32位 | +-1.4E-45 ~ +-3.4028235E+38 |
double | 0.0 | Double | null | IEEE符点 | 64位 | +-4.9E-324 ~ +-1.7976931348623157E+308 |
这里有几个要注意的地方:
1、除了这八种基本数据类型,其他的类型都是引用类型。基本数据类型是在栈中直接分配内存,而引用类型是数据的引用在栈中,但它的对象在堆中。要想学好 Java ,必须知道各种数据在内存中的存储位置,对内存有了很好的了解,可以有助你更好地分析程序。
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。
对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
int a= 5;//对于a你只能用来做计算,比如加减乘除
Integer b = 5;//b你可以用来做很多事情,因为他是一个对象,他有很多方法,你可以像使用String对象那样使用它。
2、Java 中默认的整数类型是 int 类型,如果要定义为 float 型,则要在数值后加上 l 或 L;
默认的浮点型也是双精度浮点,如果要定义为 float 型,则要在数值后加上 f 或 F。
3、基本数据的自动转换,小可转大,大转小会失去精度!
byte -> short, char -> int -> long
int -> float -> double
long -> double
4、一个字节(Bytes)等于8位,
一个字节等于256个数,就是-128到127一共256。1字节(Bytes) = 8比特(Bit)。
一个英文字母或一个阿拉伯数字就是一个字符,占用一个字节。
一个汉字就是两个字符,占用两个字节。
一般讲大小是用 Bytes,大写的“B”,讲网络速率是用 bit,注意是小写的“b”。
例:一个文件有8MBytes
例:我下载文件的速率是256KB/s,即2Mbit,这通常就是我们宽带上网的速率。
我们在平时或面试时会遇到的一些问题
1、int 与 Integer:
Integer 与 int 解惑:1、Integer 是一个类,用 Integer 声明一个变量其是一个对象类型(或者说引用类型);int 是基本类型,用 int 声明的变量是非对象类型,即不能在其上调用方法。
2、“==”作用于对象上的时候,其比较的是对象的引用本身的值(或者说对象的地址更容易理解),而作用于基本类型的时候比较的就是基本类型的值。
关于Integer的自动缓存大小:1、Integer 自动装箱的缓存大小问题。