基本数据类型变量间的运算规则
- 这里提出可以做运算的基本数据类型有7种,不包含boolean类型.
- 运算规则包括:
- 自动类型提升
- 强制类型转换
- 此VariableTest3.java用来测试自动类型提升
- 规则:当容量小的变量与容量大的变量做运算时,结果自动转换为容量大的数据类型
- byte —> short —> int —> long —> float —> double
- 特别的:byte、short、char(两个char类型做运算也一样)类型的变量之间做运算,结果为int类型,原因是防止溢出
- 说明:此时的容量小或大,并非指占用的内存空间的大小,而是指表示数据的范围大小
- long(8字节)、float(4字节)
- 规则:当容量小的变量与容量大的变量做运算时,结果自动转换为容量大的数据类型
public class VariableTest3{
public static void main(String[] args){
int i1 = 10;
int i2 = i1;
long l1 = i1;
float f1 = l1;
byte b1 = 12;
int i3 = b1 + i1;
}
}
注意:
int i1 = 10;
byte b2 = 20;
byte b2 = i1 + b2; // 此时默认的类型为int
错误原因: 不兼容的类型: 从int转换到byte可能会有损失
// 特殊的情况1: byte、short之间做运算
byte b3 = 12;
short s1 = 10;
// 编译不通过
// short s2 = b3 + s1;
int i4 = b3 + s1;
// 编译不通过,short也一样
// byte b5 = b2 + b3;
// 特殊的情况2: char
char c1 = 'a';
// 编译不通过
// char c2 = c1 + b3;
int i5 = c1 + b3;
练习1:
long l2 = 123L; // 8个字节
long l3 = 123; //相当于int类型,占4个字节 理解为:自动类型提升
long l4 = 123123123123; // 123123123123理解为int类型,因为超出了int范围,所以报错
long l5 = 123123123123L;// 此时的123123123123L就是使用8个字符存储的long类型的值
练习2:
float f2 = 12.3F;
// 编译不通过
// float f3 = 12.3; // 不满足自动类型提升的规则(double ---> float),所以报错
练习3:
// 规定1:整型常量,规定是int类型
byte b5 = 10;
// byte b6 = b5 + 1;
int ii1 = b5 + 1;
// 规定2:浮点型常量,规定是double类型
double dd1 = b5 + 12.3;
练习4:说明为什么不允许变量名是数字开头的,为了"自洽"
int 123L = 12;
long l6 = 123L;
题外话:自己开发一种语言涉及到两个规则
- 编写语法规则
- 编译器 javac.exe —> .class —> JVM(可以认为是世界上最强大的虚拟机)
以上两条是尚硅谷的宋老师讲的
以下是我从网络搜索来的:
自己开发一种编程语言需要涉及以下方面:
-
语法设计:需要设计编程语言的语法规则,包括关键字、运算符、变量类型等,这是编程语言的基本框架。
-
语义设计:需要确定编程语言的语义规则,即编程语言中各个元素的含义以及它们之间的关系。这是编程语言的核心。
-
编译器/解释器设计:需要设计编译器或解释器来实现编程语言,将源代码转换为可执行代码。
-
标准库设计:需要设计标准库来提供常用的函数和类,以便开发人员能够更方便地使用编程语言。
-
文档和教程编写:需要编写文档和教程,以帮助用户了解和使用编程语言。
-
测试和调试:需要对编程语言进行测试和调试,以确保它在各种情况下都能正常工作。
-
版本控制:需要使用版本控制工具来管理编程语言的代码和文档,以便进行版本控制和协作开发。
-
社区建设:需要建立社区来推广和发展编程语言,吸引更多的开发者加入到这个项目中来。
-
上述8条仅供参考