Java数据类型是最基础的部分,也是最容易忽视的重要部分。Java是强类型语言,因而对数据类型的掌握也提出了很高的要求。本文主要内容包括:
- Java数据类型构成
- 基本数据类型
- 基本数据类型之间的类型转换
- String不是基本数据类型
1.Java数据类型构成
Java数据类型分为两大类:基本数据类型和引用数据类型。
基本数据类型包括:
- 整型: byte \ short \ int \ long
- 浮点型: float \ double
- 字符型: char
- 布尔型: boolean
引用数据类型包括:
- 类(class)
- 接口(interface)
- 数组(array)
2.基本数据类型
2.1整型数据
类型 | 占用存储空间 | 表数范围 |
---|---|---|
byte | 1字节=8bit位 | -128~127 |
short | 2字节 | -215~215-1 |
int | 4字节 | -231~231-1(约21亿) |
long | 8字节 | -263~263-1 |
基本要求:
- Java中的整型常量默认为int型,声明long型常量必须加"L"或"l"结尾。
- Java中程序变量通常声明为int型,除非不足以表示为较大的数,才使用long型。
- byte很容易超出范围。
byte b1=12;
byte b2=128;//超出范围,出错
long num=22412414L;//声明long型常量必须加"L"或"l"结尾
2.2浮点型
通常带有小数点的数字称为浮点型。
类型 | 占用存储空间 | 表数范围 |
---|---|---|
float | 4字节 | -3.403E38~3.403E38 |
double | 8字节 | -1.798E308~1.798E308 |
注意:
1. float:
- 单精度,尾数可以精确到7位有效数字,很多情况下,难以满足要求
- 声明float常量,必须加"F"或"f"结尾。
- float表示的数值范围比long型还要大。
2.double
- 双精度,精度是float的两倍,通常采用此类型。
double d1=123.3;
float f1=12.3f;//必须加"F"或"f"结尾
2.3字符类型 char
char 使用注意事项
- char 1字符=2个字节
- 定义char型变量,通常使用一对单引号—— ''
- char的三种表现形式
- 单个字符
- 转义字符: \n \t
- 直接使用Unicode值来表示字符型常量;’\uXXXX’,其中XXXX表示一个十六进制的整数,例如,\u000a表示\n;
char c1='a';
char c2='1';
char c3='中';
char c4='の';
char c5='\n';//换行
char c6='\t';//制表符
char c7='\u0043';//Unicode中表示 c
2.4布尔型 boolean
只有两个值:true和false,常常使用在循环和条件判断当中。
3.基本数据类型之间的类型转换
前提:这里讨论的是7种基本数据类型之间的运算,不包括boolean类型。
3.1自动类型提升
提升规则:
当容量小(表数范围而不是字节大小)的数据类型的变量与容量大的数据类型的变量做运算的时候,结果自动提升为容量大的数据类型。
byte /char/ short --> int --> long --> float --> double
特别地,当byte/char/short 三种变量做运算(包括同类型之间运算)时,结果为int型。
byte b1=2;
int i1=129;
int i2=b1+i1;//相加提升到int
System.out.println();
float f1=b1+i1;
//******************************
char c1='a';
int i3=10;
int i4=c1+i3;
//******************************
short s2=10;
int i5=s2+c1;
//******************************
byte b2=10;
int i6=b2+c1;
//******************************
int i7=b1+b2;
3.2强制类型转换
概念:自动提升运算的逆运算,即将容量大的数据类型转换为容量小的数据类型。
实现方法:使用强转符号(),内部添加目标类型。
可能会导致精度损失。
double d1=12.9;
int i1=(int)d1;//12
//**************
long l1=123L;
int i2=(int) l1;
//**************
int i3=128;
byte b=(byte)i3;//-128
3.3两种常见的编码情况
- 可以不加L的long,不可以不加F的float
- long型变量位数小时,可以不加L,原因是默认int,自动提升为long型;位数大,已经超出int范围,必须加L;
- float型必须加F。
//不报错,原因是默认int,自动提升为long;
long l1=123;
//不加L会编译失败,已经超出int范围
long l2=21323827747174712710990031L;
//编译失败,不加f默认double,需要强转到float
//float f1=12.3
- 整型常量默认为int,浮点型常量默认为double
byte b1=12;
//报错
//byte b2=b1+1;
//报错
//float f1= b1+12.3;
4.String不是基本数据类型!!
4.1基本知识
- String属于是引用数据类型;
- 声明String类型变量,使用一对"";
- String可以和8种基本数据类型做运算,但是连接运算+,先运算的加数中有String类型则为连接符号。运算结果为String。
String s1="Hello World!";
String s2="a";
String s3="";
//char c1='';编译不通过
char c2=' ';
//******************
int i=24;
String s1="科比的号码:"
String info=s1+i;//连接运算
4.2测试
//*******测试1**********
char c='a';
int num=10;
String str="hello";
//*******计算一下的值**********
System.out.println(c+num+str);//107hello
System.out.println(c+str+num);//ahello10
System.out.println(c+(num+str));//a10hello
System.out.println((c+num)+str);//107hello
System.out.println(str+num+c);//hello10a
//*******测试2,判断一下输出结果**********
System.out.println("* *");//* *
System.out.println('*'+'\t'+'*');//93
System.out.println('*'+"\t"+'*');//* *
System.out.println('*'+'\t'+"*");//51*
System.out.println('*'+('\t'+"*"));//* *
//*******测试3,易错题辨析,判断对错**********
String str1=4;//报错
String str2 =3.5f+"";//
System.out.println(str2);//"3.5"
System.out.println(3+4+"Hello");//7Hello
System.out.println("Hello"+3+4);//Hello34
System.out.println('a'+1+"Hello"+3+4);//98Hello
System.out.println("Hello"+'a'+1);//Helloa1
//*******测试4,判断能否通过编译**********
//******1
short s=5;
s=s-2;//不能
//******2
byte b=3;
b=b+4;//no
b=(byte)(b+4)//yes
//******3
char c='a';
int i=5;
float d=.314F
double result = c+i+d;//yes
//******4
byte b=5;
short s=3;
short t=s+b;//no ,int
4.3 String和int转换
1.int—>String
String str1=123+"";//”123“
2.String–>int
//使用基本数据类型包装类的方法来实现
int num= Integer.parseInt(str1);//123