前言
上一节谈到Java根据数据类型,可以大致分为基本数据类型和引用数据类型 参考资料 1.https://www.bilibili.com/video/BV1Kb411W75N?p=54&spm_id_from=pageDriver&vd_source=3c581bee767ca1f72b64f486174362ef 2.《疯狂Java第三版讲义 李刚)—P49-60
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
编译并运行 注意, 修改代码如下 先编译 修改代码 编译 运行结果为231-1 = 2147483647,而不是280 修改代码 编译(超过也没有报错,视频教程用byte例如,这里有一些疑问,我认为编译不应该通过) 运行(这里也有一些疑问,为什么这里是(2)31-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类型的范围()
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; } }
编译, 修改代码
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; } }
编译,(下一节写) 修改代码
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: " reult);
}
}
编译并且运行,发现没有问题 当然,除了上面容易忽略的问题,还有一个学了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中不支持,每个赋值表达式都需要英文分号结束