变量类型转换
字符转整型
char oi="万";
int i = oi; char自动累心转换为int类型
运行结果为
19975 代表的是在Unicode 的字符编码中的19975个数字,是将字符编码的序号给到了int
整型转整型
int类型强制转为byte类型,int是4个字节,8位,byte是1个字节4位,则超出byte字节的内容会全部丢失,
输出为: 100
当a=128时;将,将a强制转换成byte
输出位:
若a=129;转换位byte类型以后时-127
a=130;转换后位-126
原因时变量溢出,byte表示的最大整数范围是(-128,127),将整数128赋值给byte类型时,数据会再次进1
结论: 强制类型转换,可能导致值超出变量的取值范围,产生变量溢出(上溢或下溢)的现象,从而导致逻辑错误,产生BUG!
浮点型转换
浮点型强制转换成整型
强制类型转换,可能导致精度损失,浮点型强制转换成整型时,舍掉所有小数位,而不是四舍五入!
转换时会先将小数点舍掉,再转换成整数类型;
若想要进行四舍五入的转换,则
变量的作用域
变量的定义和使用,必须同时遵守以下规则:
1、上边定义的,下边可以使用;
2、外边定义的,里边可以使用。
若变量超出作用域的范围则会显示:
{},一对儿花括号表示作用域的边界 ,即表示变量的范围,超出作用域之后,变量即不可使用
实际应用过程中,应考虑实际情况,定义变量的作用域,变量会占用内存,只有在超出作用域后才会释放内存,为了让程序运行时不占用过多内存,应该遵守变量作用域最小化原则;
变量的默认值
重点:当基础数据类型的变量作为类成员使用时,即成员变量,Java会赋予一个默认值:
类型 默认值
boolean false
char '/uoooo'
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
除了作为成员变量,局部变量没有默认值,使用前必须初始化;
何为初始化?初始化即为赋值,即是用变量result前,必须为其赋值。、
何为使用?使用即参与计算或参数传递。
q作为局部变量,没有对其进行赋值,导致编译报错
变量的运算
数字运算符:
整数的算数运算——“=”是赋值的意思
运算符包含:+,-,*,/,表示加,减,乘,除
加、减、乘与数学运算逻辑相似
重点标注下除法:num=15
输出为
整数间的除法计算,商只会保留整数部分,完全舍掉余数,而不是四舍五入。
输出为
%,表示求余运算(又叫模除运算),求除法计算结果的余数 即,15除6=2.。。。3,最后取3作为运算值;
做除法运算时,除数为0 ,则会报错
自增运算:
i++和++i的区别是什么
第一个输出为5
第二个输出为7
原因是i++,会先输出i,再执行自增运算,而++i,会先进行自增,再输出值,所以结果为7
不建议上面的写法,尽量不要用自增预算作为参数传递,而是运算后,再将变量传递
当程序变成
输出结果为
相对应的,有i++,就有I--,原理相同
单目运算
单目运算:+=,-=,*=,/=
i+=3 变量i的值加3再将值赋给i ;等同于i=i+3;,同样,不建议这样写
浮点数的算数运算
浮点数的除法:
浮点数虽然表示的范围大,但是浮点数常常无法精确表示。十进制的0.1换算成二进制是一个无限循环小数, 所以,无论使用float还是double,都只能存储一个0.1的近似值,如下:
采用以上语句验证X与Y是否相等,如果相等,则返回true,如果不等,则返回false ,实际返回值就是false
除法或求余运算时,当除数为零,运行时不会报错,但会返回几个特殊值:
NaN 表示 Not a Number
Infinity 表示 无穷大
-Infinity 表示 负无穷大
当浮点数除以0或整数除以浮点数时,得到的时无穷大的浮点数,当对浮点数对0取余时,得到的是非有效数字;
浮点数不支持自增、自减,
关系运算符
>,<,<=,>=,!=,==
关系运算符的比较运算的结果均是布尔值
与,或,非,只能用于布尔量之间的运算
且:&&
或:||
非:!
&& 运算的优先级高于||
为了不混淆逻辑,与和或运算串联时,一定要加括号;
三目运算:
三目运算的格式:b ? x : y b表示布尔值
第一部分b表达式的值为true时,计算结果为表达式x,反之为表达式y
运算结果为200
运算结果为-10
结果为200
变量的升级
当编译时出现
num1和num2均为byte类型,但是编译时制醋变量类型的转换,是因为所有的运算在,当有byte和short类型时,在做完运算之后,会自动提升为int类型,所以当需要继续运算时,需要将运算强制转换成byte类型即:
或者用int类型的变量来接收结果也可以,即:
Java运算时会自动提升变量类型,遵循以下规则:
1、整数运算:如果两个操作数有一个为long,则结果也为long,反之为int
2、浮点运算:如果两个操作数有一个为double,则结果为double,反之为float
溢出
整数由于存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会出错,却会得到一个奇怪的结果。当计算结果超出int类型所能表示的最大值时,发生上溢
最大值+1,就会得到最小值,超出取值范围,就需要用更大的类型去接收,否则,就会出错
超出int的取值范围,可以用long来接收
在integer的最大范围i+1之后,输出的值是2147483648,而不是-2147483648,说明被更长的类型接收,不会溢出了。