Java的类型转换
隐式类型转换:
在Java中,向数值类型和字符类型的变量中保存数据的时候,如果要保存的数据的大小,没有超过变量空间的存储大小,JVM就会自动将要保存的数据的类型转换为变量的类型,叫做隐式类型转换。
强制类型转换
在Java中,将占用空间大的数据向取值范围小的变量中保存时,因为变量空间不足,所以不能直接存放,需要使用强制类型转换。
注意:强制类型转换有可能造成数据损失,使用时需要格外注意!
强制转换格式:(数据类型)(被转数据);
练习:
以下代码编译运行有没有问题?为什么?
class Test
{
public static void main(String[] args)
{
byte a = 100;
byte b = a + 1;//这行编译出问题,因为a是变量;使用强制类型转换即可改正;
System.out.println(b);
}
}
运算符
算术运算
Java中的算术运算符和生活中的数学运算基本相似。
算术运算符符号
注意:
- 在使用算术运算时需要注意运算两侧类型:当两侧类型不统一时,运算结果和较大类型保持一致。
- 如果有字符类型的数据参与算术运算,JVM会将字符数据转换为编码表中对应的整数来参与运算。
自加自减
自加(++)自减(--)运算
++:自增运算
如果运算符在运算的数据左边,就叫做左自增运算;如果在运算的数据右边,就叫做右自增运算;
例如:int a = 10;
++a 是左自增;a++ 是右自增;
左自增,直接对原有的数据进行+1;如果这一行代码没有结束,接下来参与其它运算的,是加一后的值;
右自增: 右自增运算,首先在内存中开辟一个临时空间,将原来的数据保存在这个临时空间中;然后对变量进行加一运算;
如果这一行代码没有结束,接下来参与其它运算的,是临时空间中的值(还没有加一的值);
--:自减运算
也分为左自减和右自减,原理和自增运算一模一样,只是进行的是减一运算;
练习:
下列程序运行输出的结果是什么?为什么?
class Test
{
public static void main(String[] args)
{
int a = 10;
int b = 20;
int c = (a++) + 3*(--a) + 5*(b--) - 4*(--b);
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
字符串连接符
如果“+”左右两边至少有一边是一个字符串,他就是一个字符串连接符,可以将左右两边的结果拼接成一个大的字符串;
思考:
- System.out.println("5+5="+5+5);//打印结果是?
- 若要打印出“5+5”=10 ,上述代码怎么改?
- 下列程序运行输出的结果是什么?为什么?
class Test
{
public static void main(String[] args)
{
System.out.println('A' + 'K' + "|" + 47);
System.out.println('A' + "K" + '|' + 47);
}
}
赋值运算符
可以将数据赋值给变量的运算符就是赋值运算符;= , +=, -=, *=, /=, %=
普通赋值运算符:=
作用:表示将符号右边的数据,保存到符号左边的变量中;
class Demo
{
public static void main(String[] args)
{
int a = 3 ; //将3存储到左侧a空间中
int b , c , d;
b = c = d = a; // 将a空间中的值分别存放到d,c,b 空间中
}
}
复合赋值运算符:
+=;-=;*=;/=;%=……
表示:
先将符号左右两边进行运算,然后将运算的结果赋值给左边的变量;
注意:赋值号和算数运算符的混合运算属于一个运算符,不能拆分。并且这个符号会完成自动强转动作。
思考:以下代码有什么区别?
class Demo
{
public static void main(String[] args)
{
short s = 3;
s=s+2;
s+=2;
}
}
说明:
s=s+2//编译失败,因为s会被提升为int类型,运算后的结果还是int类型。无法赋值给short类型。
s+=2//编译通过,因为+=运算符在给s赋值时,自动完成了强转操作。
比较运算符
运算符介绍
在生活中经常需要判断数据大小,相等不相等各种操作,在Java中同样也可以判断数据的大小。
比较运算符符号:
>: 大于
>=: 大于或等于
<: 小于
<=: 小于或等于
==: 恒等于,表示比较左右两边是否相等;
!=: 不等于,表示比较左右两边不相等;
注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
注2:比较运算符“==”不能误写成“=” 。
注3:比较运算符不能多个连续一起使用;如 1 < a < 5 非法;
运算符使用演示
逻辑运算符
当需要判断某些数据符合某个区间,比如人的年龄符合某一范围等。发现使用比较运算没法完成。Java给我们提供另外一直机制,逻辑运算。逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
逻辑运算符号:
逻辑运算符:用可于进行逻辑运算(就是对布尔型数据进行运算)的符号就是逻辑运算符;
& : 与
| :或
^ : 异或。
!:非。一元逻辑运算符;
&& 短路与 || 短路或
特点:
参与逻辑运算的数据都是布尔型数据;
逻辑运算的结果也都是布尔型数据;
三元运算符
三元运算符,也称为三目运算符或问号冒号运算符。即有三个表达式参与的运算表达式。
三元运算符的格式:
接受运算结果的变量 = 布尔表达式 ? 表达式1 :表达式2;
注意:在三元运算符的左边,一定要有一个变量来接收运算的结果!
三元运算符举例:
练习:根据给定的数字,在控制台输出奇数或者偶数?
练习二:使用三元运算符,求两个整数的最大数;
作业:使用三元运算符,求三个整数中最大值、最小值;
位运算符(了解)
位运算:直接对二进制数位(0和1)进行操作的运算 符。
运算符符号:
双元位运算符:
<<:左移运算符 将运算数的二进制码整体左移指定位数,左移之后右边的空位使用“0”来补充,左边移出去的二进制数忽略不计。
>>:右移运算符 将运算数的二进制码整体右移指定位数,右边移出去的二进制数忽略不计。 左边的空位使用“符号位”来补充:若是正数使用“0”补充;若是负数使用“1”补充;
>>>:无符号右移运算符 将运算数的二进制码整体右移指定位数,右移之后的左边的空位使用“0”来补充
&:按位与 相同二进制数位上数值为1,结果为1,否则结果为0;
|:按位或运算,运算原则:相同二进制数位上数值为0,结果为0,否则结果为1;
^:按位异或,运算原则:参与运算的两个数相应位相同则结果为0,异号则为1;
使用按位异或运算,可以方便的实现两个数字的交换;
int a = 5, b = 7;
int c = a ^ b ;
a = c ^ a ; a = 7
b = c ^ a ; b = 5;