3-Java中的基本数据类型

本文详细介绍了Java中的基本数据类型,包括数值类型(如byte, short, int, long, float, double)及其范围,以及布尔类型boolean。讨论了赋值限制、类型转换和运算时的自动提升规则。特别提到了多个float类型运算不会自动转换为double类型,以及C语言和Java在此处的区别。最后,通过实例展示了可能出现的编译错误和解决办法。
摘要由CSDN通过智能技术生成

前言

上一节谈到Java中的变可按数据类型分类,大致可分为基本数据类型和引用数据类型
参考资料
1.https://www.bilibili.com/video/BV1Kb411W75N?p=54&spm_id_from=pageDriver&vd_source=3c581bee767ca1f72b64f486174362ef
2.《疯狂Java讲义》(第三版 李刚)—P49-60

1.基本类型

数值类型

类型占用空间范围
byte1个字节-128 ~ 127
short2个字节-215 ~ 215-1
char2个字节0 ~ 216-1
int4个字节-231 ~ 231-1
long8个字节-263 ~ 263-1
float4个字节-3.403E38 ~ 3.403E38
double8个字节-1.798E308 ~ 1.798E308

布尔类型

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

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

int

在这里插入图片描述
编译一下,并运行
在这里插入图片描述
注意,对于任何数值类型(下面的也同理),所赋值不能超过其范围!
修改代码如下
在这里插入图片描述
先编译
在这里插入图片描述
修改代码
在这里插入图片描述
编译
在这里插入图片描述
运行,可以看到结果为231-1 = 2147483647,而不是280
在这里插入图片描述
修改代码
在这里插入图片描述
编译(超过了也没有报错,视频教程里用的是byte举例,这里有些疑惑,我认为应该编译不通过的)
在这里插入图片描述
运行(这里也有些疑惑,为什么这里又是((231-1) + 1 = -231),然后-231+99 = -2147483549呢?我暂时猜想原因应该还是我不了解从double转换到int的机制吧!)
在这里插入图片描述

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

编译
在这里插入图片描述

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

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);
	}
	
}

命令行编译
在这里插入图片描述
修改代码

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);
	}
	
}

编译并运行
在这里插入图片描述

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语言不同的地方!
在这里插入图片描述
修改代码

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

编译
在这里插入图片描述
接下来演示一个容易犯的错误!!!修改代码如下

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,由此产生如下错误!!!(这个下一节会写)
在这里插入图片描述
修改代码

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);
	}
}

编译
在这里插入图片描述

3.课后疑问

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

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);
	}
}

编译并且运行,发现没有问题
在这里插入图片描述
当然,除了上面容易忽略的问题,还有一个学了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类型的,就报错了
在这里插入图片描述

4.总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值