前言

上一节谈到Java中的变可按数据类型分类,大致可分为基本数据类型和引用数据类型

1.基本类型

数值类型

类型

占用空间

范围

byte

1个字节

-128 ~ 127

short

2个字节

-215 ~ 215-1

char

2个字节

0 ~ 216-1

int

4个字节

-231 ~ 231-1

long

8个字节

-263 ~ 263-1

float

4个字节

-3.403E38 ~ 3.403E38

double

8个字节

-1.798E308 ~ 1.798E308

布尔类型

关于布尔类型占用空间,暂时未找到确切说法,请参考https://wenku.baidu.com/view/120a2304a9ea998fcc22bcd126fff705cc175cad.html
boolean类型的变量只能为true或者false,一般都用来做条件判断

2.基本数据类型的使用和相关注意项

int

java 判断数据变化 java中如何判断数据类型_System


编译一下,并运行

java 判断数据变化 java中如何判断数据类型_java 判断数据变化_02


注意,对于任何数值类型(下面的也同理),所赋值不能超过其范围!

修改代码如下

java 判断数据变化 java中如何判断数据类型_赋值_03


先编译

java 判断数据变化 java中如何判断数据类型_Java_04


修改代码

java 判断数据变化 java中如何判断数据类型_java_05


编译

java 判断数据变化 java中如何判断数据类型_Java_06


运行,可以看到结果为231-1 = 2147483647,而不是280

java 判断数据变化 java中如何判断数据类型_System_07


修改代码

java 判断数据变化 java中如何判断数据类型_System_08


编译(超过了也没有报错,视频教程里用的是byte举例,这里有些疑惑,我认为应该编译不通过的)

java 判断数据变化 java中如何判断数据类型_java_09


运行(这里也有些疑惑,为什么这里又是((231-1) + 1 = -231),然后-231+99 = -2147483549呢?我暂时猜想原因应该还是我不了解从double转换到int的机制吧!)

java 判断数据变化 java中如何判断数据类型_java_10

接下来继续修改如下(注意,这次没有用加100,而是直接给超过范围的整数!)

java 判断数据变化 java中如何判断数据类型_java 判断数据变化_11

编译

java 判断数据变化 java中如何判断数据类型_java 判断数据变化_12

总之就是不要超过范围啦!!!!!

byte

视频教程里举例时用的是byte类型,那么我就用一下byte来试一下,需要注意的是Java中byte的取值范围为-128~127(这个我总是记错)
编写代码

class Test2{
	
	public static void main(String args[]){
		int myMathGrade = 77;
		System.out.println("MathGrade: "+myMathGrade);
		
		byte testByte1 = 123+9;
		System.out.println("testByte1: "+testByte1);
	}
	
}

命令行编译

java 判断数据变化 java中如何判断数据类型_赋值_13


修改代码

class Test2{
	
	public static void main(String args[]){
		int myMathGrade = 77;
		System.out.println("MathGrade: "+myMathGrade);
		
		byte testByte1 = (byte)(123+9);
		System.out.println("testByte1: "+testByte1);
	}
	
}

编译并运行

java 判断数据变化 java中如何判断数据类型_java_14

float、char、long

关于这些不一一列举了,就是float和long需要注意赋值的数字后带相应的标记字母,然后char型有好几种写法以及常用的转义字符,同时还需要注意char类型的范围(和C语言里面也不一样!

boolean

就是注意和C的区别,C里面可以这么写,这个var可以是int、bool、short、long等类型,对于bool类型,则同样是判断真假,而对于其他几个数值类型,则是判断是否非零

if (var) {
	//需要执行的内容
}

而在Java里,上面的var只能是boolean类型!
略(其他内容等碰到再写)。

short

编写代码

class Test2{
	
	public static void main(String args[]){
		short a, b, c;
		short d = 50;
		d = 40;
		a = 80, b = 21, c = -45;
	}
	
}

编译,注意这也是和C语言不同的地方!

java 判断数据变化 java中如何判断数据类型_java_15


修改代码

class Test2{
	
	public static void main(String args[]){
		short a, b, c;
		short d = 50;
		d = 40;
		a = 80;
		b = 21;
		c = -45;
	}
	
}

编译

java 判断数据变化 java中如何判断数据类型_java_16


接下来演示一个容易犯的错误!!!修改代码如下

class Test2{
	
	public static void main(String args[]){
		short a, b, c;
		short d = 50;
		d = 40;
		a = 80;
		b = 21;
		c = -45;
		d = a + b + c;
	}
	
}

编译,因为发生了自动类型转换,如short变为了int,由此产生如下错误!!!(这个下一节会写)

java 判断数据变化 java中如何判断数据类型_java_17


修改代码

class Test2{
	
	public static void main(String args[]){
		short a, b, c;
		short d = 50;
		d = 40 - 9;
		a = 80;
		b = 21;
		c = -45;
		d = (short)(a + b + c);
	}
}

编译

java 判断数据变化 java中如何判断数据类型_java 判断数据变化_18

3.课后疑问

我记得在keil5编写C语言控制单片机时(当时在准备第六届全国大学生起重机大赛),float类型与float类型进行运算,是自动转换为double类型的,然后就报了一些警告,如下图,那么我这里就有疑惑了,会不会Java里float与float运算也会出现自动转换为double呢?

java 判断数据变化 java中如何判断数据类型_Java_19


编写测试代码如下

class Test2{
	
	public static void main(String args[]){
		short a, b, c;
		short d = 50;
		d = 40 - 9;
		a = 80;
		b = 21;
		c = -45;
		d = (short)(a + b + c);
		
		float test_float_num1, test_float_num2, result;
		test_float_num1 = (float) 33.8;
		test_float_num2 = 56.f;
		result = test_float_num2/test_float_num1;
		System.out.println("result: "+result);
	}
}

编译并且运行,发现没有问题

java 判断数据变化 java中如何判断数据类型_java 判断数据变化_20


当然,除了上面容易忽略的问题,还有一个学了C语言都知道的自动转换原则:

整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型

修改代码如下

class Test2{
	
	public static void main(String args[]){
		short a, b, c;
		short d = 50;
		d = 40 - 9;
		a = 80;
		b = 21;
		c = -45;
		d = (short)(a + b + c);
		
		float test_float_num1, test_float_num2, result;
		test_float_num1 = (float) 33.8;
		test_float_num2 = 56.f;
		result = test_float_num2/test_float_num1*1.;
		System.out.println("result: "+result);
	}
	
}

编译结果报错如下,因为1. 是double类型的,因此右边转换位double类型的,而左边的变量是float类型的,就报错了

java 判断数据变化 java中如何判断数据类型_Java_21

4.总结

注意基本类型相关使用
(1)赋值不能超出其范围
(2)char型有好几种表示方式,记住一些常用常见的转义字符
(3)运算时存在自动类型转换,注意几种容易犯的错误(“当整个算术表达式中包含多个基本数据类型的变量时,发生数据类型提升,如所有byte类型、short类型和char类型将被提升到int类型”),并且已经以short类型自动转换为int类型说明,同时还结合自身以前比赛学习使用C语言的经验,进行对比,得出Java中多个float类型变量一起运算时不会转换为double(当然前提是没有double类型参与)
(4)注意C语言中赋值表达式之间可以逗号隔开,最后英文分号结束,而Java中不支持,每个赋值表达式都需要英文分号结束