Java基本数据类型

来源:互联网 发布:淘宝的淘金币怎么用 编辑:程序博客网 时间:2024/06/06 19:52

Java是一门强类型的语言,每一个变量在创建时就必须确定它的数据类型。


1.Java数据类型
java数据类型分类


我们先来学习基本数据类型:


基本型别 大小(8位=1字节) 取值范围 byte 8byte -128~127(-27~27-1) short 16byte -32768~32767(-215~215-1) int 32byte -231~231-1 long 64byte -263~263-1 float 32byte IEEE754~IEEE754 double 64byte IEEE754~IEEE754 char 16byte Unicode0~Unicode216-1 Boolean true,false

①:IEEE754 浮点单精度数字格式定义了一个用于存储浮点数的比特布局。在空比特布局中,一个比特留作符号位,八个比特留作指数,23个比特留作尾数。这些比特是按最重 要比特到最不重要比特进行排列的。

float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位。

类型 符号位 指数位 尾数位 float 1bit 8bits 23bits double 1bit 11bits 52bits

所以,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2128 ~ +2128,也即-3.40E38 ~ +3.40E38;double的范围为-21024~ +21024,也即-1.79E308 ~ +1.79E308


数据类型运用:

byte b = 100;short s = 20000;int i = 3643514;long l = 4872367623; //注①float f = 3.14;double d = 23.9861;char c = 'c';        //注②boolean = true;

注①:当我们输入这一句的时候,发现编译器报错了:超出范围,而4872367623并没有超过long数据类型的范围,这是为什么呢?原来4872367623在给变量l赋值的同时,自己也属于Java默认的数据类型int,也就是我们在编程的时候,每输入一个整数,它都默认为int类型的,那么想要输入大一点的整数,就得用到一会儿要说的类型转换了。在4872367623后加上l使它转换为long类型。

long l = 4872367623l;

类似的还有下面的浮点型代码,当输入一个小数的时候,默认类型为double,当你赋值给float,编译器也会报错,解决方法一样,在小数后面加上f

float f = 3.14f;

注②:字符类型(char)用于存储单个字符。在定义字符变量时,要以单引号表示’s’,而”s”表示一个字符串,虽然只有一个字符,但由于是双引号,它仍然表示字符串。
同C、C++一样Java也把字符串作为整数看待,由于unicode采用无符号编码,可以存储65536个字符(0x0000~0xffff),几乎可以处理所有国家的语言文字。我们可以直接定义一个char类型的字符,也可以用数字来定义字符:

char c = 'c';char c = 99 ; //字符‘c’在unicode中排第99位

转义字符是一种特殊的字符变量,用反斜杠“\”开头,具有特殊的含义:

转义字符 含义 \ +1到3位八进制数字(\000~\377) 1~3位八进制所表示的字符 \u +4个十六进制数字(\u0000~\uffff) 4位十六进制所表示的字符 \’ 单引号 \” 双引号 \ 反斜杠 \r 回车 \n 换行 \f 换页 \t 垂直制表符,将光标移到下一个制表符的位置 \b 退格
char a = '\141';    //八进制数141(97)位置上的字符(a)char b = '\u0061';  //十六进制数0061(97)位置上的字符(a)char c = '\'';      //参照表格char d = '\"';char e = '\\';char f = '\r';char g = '\n';char h = '\f';char i = '\t';char j = '\b';

每个个Unicode转义字符在源文件中都需要用6个字符来表示,但是它们只表示字符串中 的一个字符。Java对在字符串字面常量中的Unicode转义字符没有提供任何特殊处理。编译器在将 程序解析成各种符号之前, 先将Unicode转义字符转换成为它们所表示的字符。


2. 基本类型之间的转换
除boolean类型外,其他7种类型都能相互进行转换。7种类型按精度排列:
byte <(short=char)< int < long < float < double
很明显,如果从精度小转换到精度大,不会损失精度,可以自动完成;而从精度大转换到精度小,则会损失精度,必须强制转换。而short和char两种相同精度的类型也必须强制转换。

1.自动转换
因为较小的类型要转成较大的类型,内存总是足够的,不需要强制转换。如果将数据保存到byte、short、char、long的时候,也会自动进行类型转换。

byte b = 100;       //100为int类型,对变量b赋值时自动转换,注意数据不要超过byte类型的范围(-128~127)short s = 20000;    //同上int i = 3643514;long l = 4872367623l;//见注①

2.强制转换
如果要把较大类型的转成较小的类型,就必须强制转换,也被称作缩小转换,因为必须显式地使数值更小以适应目标类型。强制转换采用转换格式:
(类型)变量

int a = 100;short s = 97;byte b = (byte)a;//将int类型的变量a强制转换为byte并赋值给bchar c = (char)s;//short和char两种相同精度的类型也必须强制转换

表达式中的类型会自动提升,所有byte、short、char都被提升为int。如果有一个操作数里面有更高精度的类型,则整个表达式提升为该类型,比如:long、float和double。

0 0
原创粉丝点击