一. java数据类型
引用类型:类、接口和数组类型,null类型
下图:
1. 整形
Java整数常量 默认就是int类型(占4个字节):
5,100,1000都是int类型
a:如果将一下较小的整数常量(在byte或short数值范围之内),赋给一个byte或short变量,系统会自动把这个整数常量当成byte或short类型来处理。
// 下面代码是正确的,系统会自动把56当成byte类型处理
byte a = 56;
b:如果将一个巨大的整数常量(超出了int类型),java
不会自动当成long类型来处理。
/*
下面代码是错的,系统不会把9999999999999当成long类型处理,
所以超出int的表数范围,从而引起错误
*/
// long bigValue = 9999999999999;
c:如果希望系统把一个整数常量当成long类型来处理,应当在整数常量
后加上-l或L后缀。
// 下面代码是正确的,在巨大的整数值后使用L后缀,强制使用long类型
long bigValue2 = 9223372036854775807L;
2. 浮点
浮点数 默认为 double类型(占8个字节)
//直接把5.6赋值给float类型变量将出现错误
float a = 5.6
//必须强转
float a = (float)5.6
3. 二进制整数
二进制整数以0b或者0B开头, 默认占32位
当定义32位的二进制整数时, 最高位是符号位,1表示负数,负数在计算机里是以 补码的形式存在的。
图:
如果在二进制整数后添加L,那么它将占64位
// 定义二个8位的二进制数
int binVal1 = 0b11010100;
byte binVal2 = 0B01101001;
System.out.println(binVal1); // 输出212
System.out.println(binVal2); // 输出105
/*
定义一个8位的二进制,该数值默认占32位,因此它是一个正数。
只是强制类型转换成byte时产生了溢出,最终导致binVal4变成了-23
*/
byte binVal4 = (byte)0b11101001;
System.out.println(binVal4); // 输出-23
// 定义一个32位的二进制数,最高位是符号位。
int binVal3 = 0B10000000000000000000000000000011;
System.out.println(binVal3); // 输出-2147483645
/*
定义一个32位的二进制数,最高位是1。
但由于数值后添加了L后缀,因此该整数的实际占64位,第32位的1不是符号位。
因此binVal5的值等于2的31次方 + 2 + 1
*/
long binVal5 = 0B10000000000000000000000000000011L;
System.out.println(binVal5); // 输出2147483651
4. 下画线分隔
不管是整型数值,还是浮点型都可以用下画线
// 定义一个32位的二进制数,最高位是符号位。
int binVal = 0B1000_0000_0000_0000_0000_0000_0000_0011;
double pi = 3.14_15_92_65_36;
double height = 8_8_4_8.23;
二. 基本类型的类型转换
1. 自动类型转换
int a = 6;
// int可以自动转换为float类型
float f = a;
<pre name="code" class="java">// 定义一个byte类型的整数变量
byte b = 9;
// 下面代码将出错,byte型不能自动类型转换为char型
// char c = b;
// 下面是byte型变量可以自动类型转换为double型
double d = b;
b:当把任何基本类型的值和 字符串值进行连接运算时, 基本类型的值将自动转换为字符串类型
// 下面代码是错的,因为5是一个整数,不能直接赋给一个字符串
// String str1 = 5;
// 一个基本类型值和字符串进行连接运算时,基本类型值自动转换为字符串
String str2 = 3.5f + "";
// 下面语句输出7Hello!
System.out.println(3 + 4 + "Hello!");
// 下面语句输出Hello!34,因为Hello! + 3先会把3当成字符串处理,
// 而后再把4当成字符串处理
System.out.println("Hello!" + 3 + 4);
2. 强制类型转换
int iValue = 233;
// 强制把一个int类型的值转换为byte类型的值
byte bValue = (byte)iValue;
// 将输出-23
System.out.println(bValue);
double dValue = 3.98;
// 强制把一个double类型的值转换为int
int tol = (int)dValue;
// 将输出3
System.out.println(tol);
把233强转成byte如下图:
3. 表达式自动提升
表达式的数据类型将自动提升到与表达式中 最高等级操作数同样的类型
// 定义一个short类型变量
short sValue = 5;
// 下面代码将出错:表达式中的sValue将自动提升到int类型,
// 则右边的表达式类型为int,将一个int类型赋给short类型的变量将发生错误。
// sValue = sValue - 2;
表达式中包含字符串时
// 输出字符串Hello!a7
System.out.println("Hello!" + 'a' + 7);
// 输出字符串104Hello!
System.out.println('a' + 7 + "Hello!");
//'a'自动提升为int了