您的位置:首页 > 编程语言 > Java开发

Java基本类型

2016-04-10 22:25 357 查看

说明

java的Object是所有的对象的基类,它也有自己的基本类型。这些基本类型存储在栈中,运行速度更快。对于这些基本类型java都有对应的包装类,对应的占用空间也更大,尽量使用基本类型处理。

java的基本类型主要有boolean,char,byte,short,int,long,float,double,void这几个,其中String属于包装类,并不属于基本类型。

boolean

包装类:Boolean

大小:依赖于java虚拟机,一般是占用1byte。详细可见:stackOverflow上面做的实验。

数值:true false

char

包装类:Character

大小:16 bit (2字节)

数值:char采用Unicode编码方式,故最大值和最小值都是采用的Unicode形式,可见java的Character源码。

/**
* The constant value of this field is the smallest value of type
* {@code char}, {@code '\u005Cu0000'}.
*
* @since   1.0.2
*/
public static final char MIN_VALUE = '\u0000';

/**
* The constant value of this field is the largest value of type
* {@code char}, {@code '\u005CuFFFF'}.
*
* @since   1.0.2
*/
public static final char MAX_VALUE = '\uFFFF';


注:char是采用Unicode编码,占用2个字节的,表示一个字符。故可以表示一个英文或者一个汉字。

不同的编码对不同的汉字占用的字节是不同的,例如:GBK中,一个英文字符占用1个字节,1个汉字占用2个字节;UTF-8中,一个英文字符占用1个字节,一个汉字占用3~4个字节。等等还有其他类似的编码。

byte

包装类:Byte

大小:8 bits

数值:-128 ~ 127

short

包装类:Short

大小:16 bits

数值:-2^15 ~ 2^15-1

int

包装类:Integer

大小:32 bits

数值:-2^31 ~ 2^31-1

long

包装类:Long

大小:64 bits

数值:-2^63 ~ 2^63-1

float

包装类:Float

大小:32 bits

数值:可采取查看–Float.MIN_VALUES Float.MAX_VALUE

double

包装类:Double

大小:64 bits

数值:可采取查看–Double.MIN_VALUES Double.MAX_VALUE

void

包装类:Void

数值:–

大小:–

注:此类型仅仅存在,没有过多使用,它含有自己的包装类。可见djk源码。

package java.lang;

/**
* The {@code Void} class is an uninstantiable placeholder class to hold a
* reference to the {@code Class} object representing the Java keyword
* void.
*
* @author  unascribed
* @since   JDK1.1
*/
public final
class Void {

/**
* The {@code Class} object representing the pseudo-type corresponding to
* the keyword {@code void}.
*/
@SuppressWarnings("unchecked")
public static final Class<Void> TYPE = (Class<Void>) Class.getPrimitiveClass("void");

/*
* The Void class cannot be instantiated.
*/
private Void() {}
}


基本类型转换

java 的基本类型在使用中,会发生自动转换现象。例如: int 数值和double数值相加,结果就是double数值的。这些都是自动发生的类型提升。它有几个原则:

1.自动类型转化

2.取值窄的向取值宽的转化,反之需要强制类型转换。

等还有其他规则,可参考其他文档。

float和double的使用

java的float和double主要为了提供数值上的精确快速近似计算而设计的,它尤其不擅长用户货币计算 。此处需要注意下,当我们使用他们进行计算时,结果往往不如意。

System.out.println(1.00 - 9*0.1);

0.09999999999999998


对于此类计算,一般采用BigDecimal进行精确计算即可,可选择8中舍入方式,十分方便于计算。

如果要求不高,可以采用int或者long进行计算,例如:1块钱的计算,直接采用100,而不是采用0.20等计算方式。

基本类型和包装类型

java 5提供了基本类型和包装类型的自动转换,这使得他们之间的使用十分方便,但是需要合理使用。java 的基本类型都是存储于栈中的,运算速度十分快,而java包装类型都是对象占用很大的空间,再进行循环计算时,最好精确使用基本类型。

区别

区别主要有3点:

1. 基本类型只含有值;包装类型含有其他方法。比较大小时,需要注意。

2. 包装类型属于对象,会有null存在。使用时,考虑是否为null。

3. 基本类型节省空间和计算。循环使用时,注意考虑基本类型。

合理的使用

以下情况多考虑使用包装类型:

1. 集合的处理,例如:List Set 等。

2. 泛型时,参数化类型使用包装类型。

3. 反射方法的使用,考虑包装类型。

参考:

effective java书籍

博客参考:java基本类型转化原则 /article/7253934.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: