我们常说java是面向对象的,java中的一切都是对象。但这其中也有特例,就是我们常说的九大基本类型,为什么说基本类型特殊呢?因为new将对象存储于“堆”中,而非常小又简单的变量,用new是不划算的,于是乎java中不用new来创建变量,而是直接将值存储在“栈”中,使其更加高效。所以说,基本数据类型反而是特殊情况~
下图就是java的九大基本数据类型:↓
这里我来做两点补充:
1、boolean的大小没有明确。因为"It depends on Java virtual machine",也就是说,boolean的大小其实是取决于java虚拟机的,有兴趣的同学可以查一下,这里不做具体展开,直接说结论:单个boolean变量在虚拟机中是用int存储的,也就是说占4个字节也就是32bits,而boolean数组在虚拟机中,单个占1字节也就是8bits。
2、为什么说void也是基本数据类型呢?因为java中有两大类型:基本类型和引用类型。文章第一段也说了,java用new来创建对象后存入“堆”中,这就是引用类型;java不用new的话,就会将变量存入“栈”中,这就是基本类型。于是乎在《java编程思想》和《Think In Java》两本java经典书籍中,都将void归入了基本类型。
下图是除掉void的八大基本类型的默认值:↓
继续补充:
在java中,变量一定要有值(即初始化)。而变量根据作用域分为两种:全局变量和局部变量。
全局变量可以不手动初始化,java会赋予默认值(自动初始化)以确保变量被初始化了。
局部变量不可以不手动初始化,java会返回一个错误告诉你变量没有初始化。
对象包装类
概念:为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作。用于描述该对象的类就称为基本数据类型对象包装类,主要用基本类型和字符串之间的转换。
byte--->Byte
short---> Short
int--->Integer
long--->Long
float--->Float
double--->Double
char--->Character
boolean--->Boolean
void--->Void
基本类型与字符串之间的转换:
注意:字符串String是一个常用类,并不是基本类型!
基本类型--->字符串
1、基本类型数值+""
System.out.println(123+123);//246
System.out.println(123+""+123);//123123
2、用String类中的静态方法valueOf(基本类型数值);
valueOf(xxx xxx): 返回xxx参数的字符串表示形式。
例:valueOf(int i): 返回 int 参数的字符串表示形式。
3、用Integer的静态方法valueOf(基本类型数值);
Integer x =Integer.valueOf(9);
字符串--->基本类型
1,使用包装类中的静态方法 xxx parseXxx("xxx类型的字符串");
例:
int parseInt("intstring");
long parseLong("longstring");
boolean parseBoolean("booleanstring");
只有Character没有parse方法(它封装的就是一个字符)
如果字符串被Integer进行对象的封装。可使用另一个非静态的方法,intValue():将一个Integer对象转成基本数据类型值。
整数具备不同的进制体现
十进制-->其他进制
* toBinaryString 二进制
* toOctalString 八进制
* toHexString 十六进制
System.out.println(Integer.toBinaryString(60));//111100
System.out.println(Integer.toOctalString(60));//74
System.out.println(Integer.toHexString(60));//3c
System.out.println(Integer.toString(60,16));//3c
其他进制-->十进制。
* parseInt("string",radix)
System.out.println(Integer.parseInt("111100",2));//60
System.out.println(Integer.parseInt("74",8));//60
System.out.println(Integer.parseInt("3c",16));//60