2.1自动类型转换
在java中如果一个变量的初始值已经定义过了之后,在进行把这个值在赋值给另外一个变量的时候,则会自动进行数据准换,不过在更换的过程中只能是从少字节的数据类型转换成多字节的数据类型
public static void main(String[] args) {
//先定义了一个byte类型的a为数值10
byte a=10;
//把a的数值进行直接赋值给int型的b,他们自动进行数据转换
int b=a;
System.out.println(b);
}
在java中遵循类型匹配原则,但是因为自动转换所以才会出现上面的内容
2.2强制类型转换
在自动类型转换中可以看到只能由少字节数据类型转换成多字节数据类型,不能由多字节数据类型准换成少字节数据类型。
这个时候就有了强制性数据类型转换其格式为:需要更改数据类型的变量前面加上更改的数据类型
public static void main(String[] args) {
//定义一个数据类型为int a 的变量
int a=10;
//将a的值强行转换类型
byte b=(byte)a;
System.out.println(b);
}
但是注意强制类型转换其实是在欺骗编译器,运行的时候可能会出现数据一初的情况
public static void main(String[] args) {
//定义一个数据类型为int a 的变量
int a=129;
//将a的值强行转换类型
byte b=(byte)a;
System.out.println(b);
// 输出的结果为-127
}
此时数据溢出 输出-127,为啥是-127原因是经过了二进制的源码 反码 补码等运算
2.3运算符
一目运算:++ --
public static void main(String[] args) {
//定义一个整型的数值
int a=10;
//进行b的赋值顺序是先进行a++,之后是赋值给b,a++之前的值
int b=a++;
//进行c的赋值顺序是先进星++a,之后吧++a的值赋值给c
int c=++a;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
a=12 b=10 c=12
二目运算:+ - * / % += -= *= /= > < >= <= == !=
三木运算:(条件表达式)?(真执行块):( 假执行块);
2.4运算自动提升
在运算的过程过程中 其结果的数据类型是根据进行计算的变量的数据类型来定义 并且是根据精度最接近的数据类型来定义
public static void main(String[] args) {
//定义一个数据类型为整型的a的值为10
int a=10;
//定义一个数据类型为单精度浮点型的b的值为10.2
float b=10.2F;
//结果因为进行运算的变量中浮点型为精度最接近的所以,结果的数据类型只能为单精度浮点型
float c=a+b;
}
2.5流程控制
利用循环或者if语句即可进行流程控制
public static void main(String[] args) {
//定义一个整型的a为10
int a=10;
//局部内的变量在一个局部里定义完后既可在这个局域内使用
int b=0;
//利用if语句进流程控制,如果a不大于二十则不输出结果
if (a<20){
b=20;
}else{
b=10;
}
//输出a
System.out.println(a);
//输出b
System.out.println(b);
}
2.6隐式类型转换
public static void main(String[] args) {
//intIncompatible types. Found: 'int', required: 'byte'
byte a=128;
//Incompatible types. Found: 'double', required: 'float'
float b=20.5;
}
这两个表示了文件中其实数据都有默认的数据类型,不过java中有是适配类型,所以当在他们范围内则隐式类转换,如果没有在他们的范围则会直接提示我们强制转换默认类型
其中整型默认为:int
其中浮点型默认为:double
隐式类型准换
public static void main(String[] args) {
//这时就不会在报错了
byte a=127;
float b=20.5F;
}
还有一种;
public static void main(String[] args) {
//Incompatible types. Found: 'int', required: 'short
short a=5;
a=a+5;
short b=10;
//此格式表示b=(short)(b+5)
b+=5;
}
他们中的第一个是因为格式没有强制性数据转换,所以报错,而第二个却有
2.7局部变量的作用
在java函数种有两种变量 分别是:
1.在函数外部类的里面声明的变量:全局变量 字段 属性 成员变量 2.在函数内部声明的变量: 局部变量
public class DayTwo {
//全局变量
int a=10;
public static void main(String[] args) {
//局部变量
int a=10;
}
}
局部变量的作用域值得是 在哪里可以使用
从定义开始 到所在的结束大括号
并且在java中同一作用域变量名不能重复
public static void main(String[] args) {
int a = 20;
// Variable 'a' is already defined in the scope
int a = 20;
for (int i=0;i<66;i++){
}
for (int i=0;i<66;i++){
}
}