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

java学习笔记2——java数据类型总结

2017-03-30 18:03 337 查看
有其他语言基础的这里不再重复累赘,就记录一些java独特的地方

一、java的数据类型

类型二进制位数默认值对应的封装类
byte80Byte
short20Short
int40Integer
long80Long
float40.0Float
double80.0Double
char2空格Character
booleanfalseBoolean

二、整型

byte的取值范围为-128~127(-2的7次方到2的7次方-1)

short的取值范围为-32768~32767(-2的15次方到2的15次方-1)

int的取值范围为(-2147483648~2147483647)(-2的31次方到2的31次方-1)

long的取值范围为(-9223372036854774808~9223372036854774807)(-2的63次方到2的63次方-1)

基本上int型的参数就已经可以满足我们日常编程需求了,在这里需要注意的是如果定义了一个long型的参数,就需要加一个L,例如:

long i=100L;//这里个人建议用大写的L,因为小写的l和1差不多,不易分辨


三、浮点型

学过计算机原理的应该都知道,这两个类型的区别在于精度不同,double比float精度更高,范围更大

单精度:float 3.402823e+38 ~ 1.401298e-45

(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)

双精度:double 1.797693e+308~ 4.9000000e-324

这里在使用float的时候,和long一样,需要在后面加F,比如:

float f = 100F;//个人建议这里也大写,养成良好的编程习惯


四、字符型

char是按照字符存储的,在代码中用引号,不管英文还是中文,固定占用占用2个字节,用来储存Unicode字符。范围在0-65536。例如:

char s=‘码’;


char可以存储中文,那个问题来了:

为什么char型的可以存储utf-8的字符呢?

首先,GBK的汉字是两个字节的,而utf-8是三个字节的。在java的内部存储中,都是以unicode为主,一个汉字转化为unicode是两个字节,当汉字进行存储后,java会把汉字转化成unicode编码,这样子就可以存储进去了。而utf-8,GBK只不是过外在软件的编码格式,并不是内部存储的格式。

其实在存储汉字的时候,utf-16的效果要比utf-8优秀,因为utf-16只需要2byte的大小就行。

五、布尔型变量

布尔型变量还有true和false两种,在C语言中可以用1表示true,0表示false,但是在java中是不允许的。

六、String

很多人会把String当成是java的基本来类型之一,其实并不是。String是一个引用数据类型,是java中的一个类。String类型的参数用双引号表示。例如:

String s="12345";


七、强制类型转化

1、自动类型转化:

byte–>short–>int–>long–>float–>double

例如:

int a = 5;
long b=a;//这是成立的,反过来byte b=a;就不成立了,需要强制类型转化


2、强制类型转化:

例如:

int a = 8;
byte b=(byte)a;//强制类型转化是在参数前用括号加上数据类型进行转化


但是这种方法并不是全部情况都使用,需要看情况而定,因为这样子

1、会损失精度 。2、容易超出取值范围出错。

八、java引用类型

java有5种引用类型,分别是类,接口,数组,枚举,注解,这里不过多介绍

九、封装类

java的八大数据类型都有对应的封装类。

在实际编程中,基本使用的是基本数据类型来存储数据,这主要是因为如果用封装类,对于程序的开销就会变大,而这在实际中是完全没有必要的。

那为什么还要设置类呢?因为在java中,泛型类包含了预定义的集合,在这里使用的是对象类型,无法直接使用基本数据类型,所以定义了封装类,提供这些基本数据类型的包装容器。而且封装类中提供了有用的方法,可以对进行数据的操作。这里不做过多介绍

十、拆箱装箱(Autoboxing and unboxing)

举了例子:

Integer a = 100; //这是自动装箱(编译器调用的是valueOf(int i))
int   b = new Integer(100);// 这是自动拆箱


我觉得可以粗浅的理解成,进行赋值的时候,根据定义参数的类型进行基本数据和包装类的自动转换。比如第一行,定义为integer类,后面为int值,就自动封装为integet类,值为100,拆箱也是,将integer类取值赋值给int的b。

大致了解一下,具体详解大家可以看一下调用valueof方法的源码,可以发现integer的装箱会有点不同。这里便不详细解释了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java