loading...
数据类型与类型转换
Published in:2022-01-31 | category: JavaSE基础知识
Words: 1.3k | Reading time: 5min | reading:

[TOC]

数据类型

基本数据类型

整数

类型 字节 取值范围(二进制) 取值范围(十进制)
byte 1字节 -2^7 ~ 2^7 - 1 -128~127
short 2字节 -2^15 ~ 2^15 -1 -32768 ~ 32767
int 4字节 -2^31 ~ 2^31 -1 -2147483648 ~ -2147483647
long 8字节 -2^63 ~ 2 ^ 63 - 1 -9223372036854775808 ~ 9223372036854775807

二进制是计算机唯一可识别的文本,01010101,规则是逢二进一

1
2
3
4
5
6
// 0000 0001 十进制1
// 0000 0010 十进制2
// 0000 0011 十进制3
// 0000 0100 十进制4
// 0010 0000 十进制32
// 1000 0000 + 1 十进制127

有符号数,首位为符号位,符号位为0时,代表整数,为1时代表负数

当byte的最大取值(127)+1时,则有效的8位空间中,符号位发生变化,将128变为了负数


小数/浮点数

类型 字节 负数取值范围 正数取值范围
float 4字节 -3.4E+38~-1.4E-45 1.4E-45 ~ 3.4E+38
double 8字节 -1.7E+308 ~ 4.9E-324 4.9E-324 ~ 1.7 + 308

float 为单精度浮点型
double 为双精度浮点型 , Java中任何一个小数,默认类型是double

·浮点型数值采用科学技术法表示:
·2E3 等价于 2×10 ^ 3 (结果:2000.0)
·3E5 等价于 3×10 ^ 5 (结果:300000.0)

注意:double为浮点数的默认类型,如需float类型赋值,需要在值的后面添加F.

1.对于float来讲,取值范围包含int 的2147483647, float取值3.4E38 ,所以整数可直接赋值给float
2.小数的默认类型是double,所以直接给float赋值小数时,有可能赋值的小数不在float的取值范围,所以在给float赋值小数时,需要给小数进行追加F的操作,显示告知计算机此小数为float


布尔类型

类型 字节 取值范围 描述
boolean 1字节 true / false 仅可描述“真”或者“假”

·可直接赋值true / false
·也可赋值一个结果为true / false 的表达式
·注意:Java中的boolean不能参与算数运算


字符

类型 字节 取值范围(无符号数) 字符编码
char 2字节 0~65535 Unicode字符集(万国码)

ASCII码对照表
ASCII码对照表

·Unicode字符集支持ASCII编码(美国标准信息交换码)

Unicode中每个字符都对应一个十进制整数,从而可以使用多种方式赋值。

字符赋值: char c1 =’ A ‘ ; (通过’ ‘描述为 字符赋值)
整数赋值: char c2 = 65 ; (通过十进制数65在字符集中对应的字符赋值)
进制赋值: char c3 = ‘\u0041’ ;(通过十六进制数41在字符集中所对应的字符赋值)
·注意:char类型也支持整数表现形式,但char类型是无符号数,其中所有值均为正数。取值范围:0~65535


转义字符

·如果需要在程序中输出一个单引号字符,该如何完成?

1
2
3
4
5
public class TestChar{
public static void main (String args[]){
char c ='''; //编译错误:未结束的字符文字
}
}

·为解决这一问题,Java采用了转义字符来表示单引号和一些特殊符号。

转义字符 描述
\n 换行符
\t 缩进(制表位)
\ 反斜线
\ ‘ 单引号
\ “ 双引号

注意:char类型是支持\转义
使用\将”将本身具有特殊含义的字符“转换成”普通字符
使用\将“普通字符”转换成“本身具有特殊含义的字符


引用数据类型

字符串

类型 取值范围 字符编码
String 任何“ ”之间的字面值 Unicode字符序列
  • 任何“ ”之间的内容都是字符串,包括空格

类型转换

自动类型转换

  • 两种类型相互兼容
  • 目标类型大于原类型

举个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
short s = 123 ;
int i = s; //自动类型转换
System.out.println(i);

//两种类型兼容,目标类型大于原类型

float f =3.5F;
double d =f ;
System.out.println(d);

byte = 10 ;
double d2 = b ;
System.out.println(d2);

float d3 = 100.0F;
long l =d3 ; //Error
System.out.println(l); //这个会报错,小数是没有办法在毫无损失的情况下转换成整数的

强制类型转换

  • 两种类型相互兼容
  • 目标类型小于原类型
1
2
3
4
5
6
7
8
9
10
11
12
//两种类型兼容,目标类型小于原类型
short ss = 123 ;
byte bb =(byte)ss ; //在原类型前面加上 "(目标类型)"
System.out.println(bb);

float d3 = 100.0F;
long l =(long)d3;
System.out.println(l);

double dd = 123.999;
int ii = dd ;
System.out.println(ii); //这里会丢失精度,打印出123

注意:
通过在原类型前面,加上(目标类型),达到强制类型转换的目的,但是有可能会失去精度

比如: 小数强转为整数 ,则失去精度,小数点后的值无法保留。

强制类型转换规则

  • 整数长度足够,数据完整
    例:

    1
    2
    int i = 100;
    byte b =(byte)i; //b=100
  • 整数长度不够,数据截断
    例:

    1
    2
    int i =10000;
    byte b =(byte)i; //b=16 (符号位变换,可能变为负数)
  • 小数强转成整数,数据截断
    例:

    1
    2
    double d =2.5;
    int i =(int) d ; //i =2(小数位舍掉)
  • 字符整数互转,数据完整
    例:

    1
    2
    char c =65;
    int i = c ; //i = 65
  • boolean的取值为true / false ,不可与其他类型转换

Prev:
数组的基本概念
Next:
接口的基本概念
catalog
catalog