**
java中基本类型出现的原因:
**
在Java编程思想的第一章就讲到:万物皆对象,new一个对象存储在堆中,我们通过堆栈的引用来使用这些对象,但是对于经常用到的一系列类型如int,如果我们用new将其存储在堆里就不是很有效——特别是简单的小的变量。所以就出现了基本类型,同C++一样,Java采用了相似的做法,对于这些类型不是用new关键字来创建,而是直接将变量的值存储在堆栈中,因此更加高效。
分类
Java有8种基本类型,大致可以分为3类:字符型、布尔型、数值型。
1. 数值类型
- 整数类型
java中数值是没有无符号类型的,并且不会随着机器硬件的环境或者操作系统的改变而改变,它们的取值范围是固定不变的,这点相对于C/C++来说就很棒。
- byte:(1字节/8bit),最大存储数据量是255,取值范围-128~127
- short:(2字节/16bit),最大数据存储量是65536,取值范围-32768~32767
- int:(4字节/32bit),最大数据存储容量是2^32-1, 取值范围 -231~231-1
- long:64位,最大数据存储容量是2^64-1,取值范围为 -263~263-1
对于取值范围,在对应的包装器类中有常量记载,直接调用就可以了,无需记忆
基本类型byte 二进制位数:Byte.SIZE最小值:Byte.MIN_VALUE最大值:Byte.MAX_VALUE
基本类型short二进制位数:Short.SIZE最小值:Short.MIN_VALUE最大值:Short.MAX_VALUE
基本类型char二进制位数:Character.SIZE最小值:Character.MIN_VALUE最大值:Character.MAX_VALUE
基本类型double 二进制位数:Double.SIZE最小值:Double.MIN_VALUE最大值:Double.MAX_VALUE
- 浮点类型
- float:(4字节/32bit),因为浮点型默认为double,所以在赋值时必须在数字后面加上F/f.
- double:(8字节/64bit),因为浮点型默认属性为double,所以赋值时可以加d或D也可以不加。
2. 布尔型
布尔型:boolean 只能取两个值 true false 常用于条件判断,循环结构中使用
3.字符型
字符型char(1字符=2字节) 定义char型变量通常使用一对’ ',内部只能写一个字符 char c1=‘a’
整形常量默认类型为int型 浮点型常量默认类型为double型
这个是规定的,不要问为什么,记住就完事了。
Java类型转换
.基本数据类型之间的运算规则
1.自动类型提升
当容量小的数据类型变量和容量大的数据类型变量做运算时,结果自动提升为容量大的数据类型(此时的容量大小指的是,表示数的范围大小,比如float容量要大于long的容量)
byte、char、short->int->long->float->double 特别的:当byte、short、char三种变量做运算时(自身和自身做运算时也算),结果为int型
2.强制类型转换:
自动类型提升的逆运算(需要使用强转符号()) 强制类型转换可能会导致精度损失
整形常量默认类型为int型 浮点型常量默认类型为double型
3.包装器过渡类型转换
4.字符串与其他类型之间的转换
5.Date和其他数据类型之间的转换
总结:只有boolean不参与数据类型的转换
例子
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.自动转换
byte b1 = 12;
int a = b1*2; //这里发生了自动转换
//2.强制转换测试
byte byte1 = 12;
byte byte2 = 1;
byte i =(byte)(byte1 + byte1); //显示不能从byte转换成int 这里需要强制转换
//3.包装器过渡转换
String s = "123";
int value = Integer.parseInt(s); //方法返回int值赋给value
//4.字符串和其他类型的转换
int num = 2017;
String time= ""+num; //右边最终结果是String
String str1 = "123";
int value1 = Integer.valueOf(str1); //结果是int 123
//5.Date与其他数据类型的相互转换
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMDD");
String timeString = format.format(date);
}
}
关于基本类型和包装类型的总结
- 基本类型的优势:数据存储相对简单,运算效率比较高
- 包装类的优势:有的容易,比如集合的元素必须是对象类型,满足了java一切皆是对象的思想
- 声明方式不同,基本类型不适用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;
- 存储方式及位置不同,基本类型是直接将变量值存储在堆栈中,而包装类型是将对象放在堆中,然后通过引用来使用;
- 初始值不同,基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null
- 使用方式不同,基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到