java基础语法2——变量类型转换、变量作用域、变量默认值、数字运算符、逻辑运算符、溢出

变量类型转换

字符转整型

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,说明被更长的类型接收,不会溢出了。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值