数据类型目录

  • 一、数据类型的概述
  • 1.分类
  • 2.基本数据类型
  • 二、 类型转换
  • 1.自动类型转换
  • 2.强制转换
  • 三、不同数据类型的运算
  • 1.整型与字符类型
  • 2.字符串类型与其他类型
  • 四、总结
  • 五、另外


一、数据类型的概述

根据不同的数据种类,有不同的大小存储空间,所以在声明变量是时,需要使用某些特定的记号(即关键字),标记当前种类应当分配多大的存储空间。

1.分类

1)基本数据类型
变量中存储的就是数据;特点:简单、较小
2)引用数据类型
变量中存储的不是数据,而是地址(通过地址找到数据);特点:复杂,较大
例如:bean中封装了(size,age,name,adr),它的存储地址时0x10000,那么变量中存储的就是0x10000,通过0x10000找到bean中封装的数据,从而取出某个数据。

2.基本数据类型

1)整数(整数默认是int)

整数

字节

byte

1个字节

short

2个字节

int

4个字节(有符号/无符号)

lang

8个字节

//要在后面加一个L,表示长整型,不然超出范围了
lang l=30000000000L;//整数默认是int
System.out.println(l);

2)小数(小数默认是double)

小数

字节

float

4个字节

double

8个字节

//要在后面添加个F,默认为double类型
float f = 3.14F;//小数默认是double
System.out.println(f);

3)字符

字符

字节

char

2个字节

4)布尔

布尔

字节

boolean

暂定

二、 类型转换

boolean类型与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换), 否则,将编译出错。

1)byte型不能自动类型提升到char,char和short之间也不会发生自动类型提升(因为负数的问题)

2)当对小于int的数据类型(byte, char, short)进行运算时,首先会把这些类型的变量值强制转为int类型进行计算,最后会得到int类型的值。因此,如果把2个short类型的值相加,最后得到的结果是int类型,如果需要得到short类型的结果,就必须显示地运算结果转为short类型。

1 //编译出错
2 short s1 = 1;s1 = s1+1;
3 //编译通过
4 //short s1 = 1;s1 = (short)(s1+1)
5 short s1 = 1;s1 += 1;

1.自动类型转换

格式:范围大的数据类型 变量 = 范围小的数据

eg:double d = 1000;

自动类型转换,数据值的数学意义上的大小是不变的。

2.强制转换

格式:范围小的数据类型 变量 = (范围小的数据类型)范围大的数据

eg:int i = (int)6.718 //直接取整:6

强制类型转换,数据值的数学意义上的大小会被改变。

三、不同数据类型的运算

1.整型与字符类型

public class DateType {
	public static void main(String[] args) {
		System.out.println(1+'1');
	}
}	
//控制台输出:50,那说明‘1’就表示49,在ascii码表里里面可以查到字符1对应的10进制ascii值为49,”0“表示在后面拼接一个字符0,这样就很容易知道结果了。

2.字符串类型与其他类型

public class DateType {
	public static void main(String[] args) {
		System.out.println("1"+1+1);
	}
}

public class DateType {
	public static void main(String[] args) {
		System.out.println("1"+1+'1');
	}
}
//控制台输出结果都是:111

四、总结

不同的数据类型运算,从左往右计算,如果是整形,正常的10进制计算,遇到字符转成10进制的ascii码值计算,有字符就直接拼接字符,遇到字符的,后面都是字符,就没必要转化。

引用一段例子(原路径搞丢了):

System.out.println(1.1 + 1);// 2.1
 System.out.println(1 + 1.1);// 2.1
 System.out.println(1 + 0.3);// 1.3
 System.out.println(0.3 + 0.03);// 0.32999999999999996
 System.out.println(1 + 0.3 + 0.33);// 1.6300000000000001
 System.out.println(0.3 + 0.3);// 0.6
 System.out.println(1 / 0.5 + 2);// 4.0
 System.out.println(“9” + 1 / 0.5);// 92.0
 System.out.println(“9” + 1 / 0.5 + 5);// 92.05
 System.out.println(1 / 0.5 + 5 + “9”);// 7.09
 System.out.println(1 / 0.3);// 3.3333333333333335
 System.out.println(3 * 0.3);// 0.8999999999999999
 System.out.println(3 * 0.4);// 1.2000

000000000002
System.out.println(0.3 * 0.3);// 0.09

不难发现:
基本类型(除了boolean外)可以自动转换的,自动转换的形式为:byte——》short——》char——》 int——》long——》float——》double,其中byte,short,char在运算时是自动转换为int型的,而int与long运算时自动转换为long型。从上可知,float与double运算时是自动转换为double再进行计算的,int与float运算时先转换为float再运算。也就是说,表述范围小的可以自动转换为表述范围大的,(表述范围不是指类型的大小)其次,如果你要得到某一类型的数值时,也可以通过强制转换来实现

五、另外

0)数据转换的类型有两种,第一种是显式转换(强转),第二种是隐式转换(自动转换)。
1)从低级(低范围表述)向高级(高范围表述)类型的数据转换,系统会自动执行,这种类型为隐式转换。
2)精度由高到低:byte,short,int,long,flaot,double(不包括字符类型和逻辑类型)。
3)低精度类型的数据向高精度类型的数据转换的时候,永远不会溢出,并且总是成功的。反之,必须使用显示转换,且必然会有信息丢失,有可能失败。
4)执行显式转换的时候,可能会导致精度损失,只要是boolean类型以外的数据类型都可以显式转换的方式达到。