JAVA有算术运算符,关系运算符,逻辑运算符,赋值运算符,条件运算符,字符串连接运算符,位运算符,移位运算符等
1 算术运算符
+ - x / % ++ --
1)运算结果可能超出数据类型表示范围;
2)除法 整数相除,结果为整数,舍弃小数部分;
3)除法 除数为0,编译没有语法错误,运行会产生算术异常。
整数相除时,除数不能为0
4)求余 ,余数的符号与被除数的符号一致;
5)自增与自减,有前缀++x和后缀x--两种形式,
前缀先自增再运算 //y=++x y=x+1
后缀先运算再自增 //y=x++ y=x x=x+1
注:自增自减隐藏强制类型转换
6)整数,小数,字符都可以参与运算,如果有多个数据类型参与运算
则:如果有double类型,则整个表达式就是double类型。
优先值double>long>int,最低为int。
算术表达式就是用算术运算符连接起来的式子。
2关系运算符
> >=<<=== !=
关系运算符的结果是一个布尔值(true/false)
字符串的比较
字符串使用string定义,string式系统定义的一个类
string str1="abc";//直接赋值字符串字面量
string str2="ab"+"c";//使用加号进行字符串的连接
string str3=new string("abc");//使用string类的构造方式创建字符串对象
JAVA把内存分为栈区,堆区,方法区三块。
字符串字面量存储在方法区的常量区里,系统先在常量区中查找这个字符串是否存在,如果不存在就把字符串存在常量区,然后把常量区的存储地址赋值给变量。
如果常量区中有这个字符串,就直接把这个字符串的地址赋值给变量
"ab"+"c"是两个字符串常量进行连接生成一个新的字符串常量,和"abc"没什么不同
使用new string创建的,new会在堆中分配一块存储空间
如上,如果用string比较字符串,实际比较的是字符串的地址,如果想直接比较字符串,可以使用equals()方法
例:system.out.println(str1.equals(str2)); 比较两个字符串
system.out.println("abc".equals(str2)); 也可以直接比较
3逻辑运算符
逻辑与&,逻辑或|,逻辑异或^,逻辑非!,短路与&&,短路或||
1逻辑运算符是对布尔值进行运算的
与&
操作数1 | 操作符 | 操作数2 | 运算结果 |
ture | & | true | true |
true | & | false | false |
false | & | true | false |
false | & | false | false |
操作数1 | 操作符 | 操作数2 | 运算结果 |
ture | | | true | true |
true | | | false | true |
false | | | true | true |
false | | | false | false |
异或^
操作数1 | 操作符 | 操作数2 | 运算结果 |
ture | ^ | true | false |
true | ^ | false | true |
false | ^ | true | true |
false | ^ | false | false |
两个数不一样,结果才是true
操作数1 | 操作符 | 操作数2 | 运算结果 |
! | true | false | |
! | false | true |
只有一个操作数
2逻辑运算符经常用于连接多个布尔表达式。
3短路与&&,操作结果与逻辑与&一样。
短路与&&,如果左侧表达式为false,不计算右侧表达式的值了。
短路或||,如果左侧为true,不计算右侧表达式的值了。
建议使用短路与,短路或,优化代码
4赋值运算符
变量=表达式
把表达式的值赋值给左侧的变量
注意:表达式的数据类型要与左侧变量的类型兼容
复合赋值/自反赋值 :+=,-=,*=,/=
如:x +=5,相当于x=x+5
复合类型隐含强制类型转换
5条件运算符
条件?表达式1:表达式2
如果条件成立,整个表达式的值就是表达式1的值
如果条件成立,整个表达式的值就是表达式2的值
例:
class Demo01{
public static void main (String[]args) {
int num1=80;
int num2=40;
int result =num>num2 ? num1:num2;
system.out.println(result);
}
}
/*
如果num1>num2成立,就把num1的值赋值给变量result
如果num1>num2不成立,酒吧num2的值赋值给变量result
就是把num1和num2中最大的数保存到变量result
*/
6字符串的连接运算符
+
连接两个字符 如: "hello"+"world" //输出helloworld 。
字符串可以与基本类型进行连接,会先把基本类型数据转换为字符串再连接。
基本数据类型定义给字符串
string str=123 //错误
string str2= ""+123
str2=""+true
7位运算符
按位于&,按位或|,按位异或^,按位取反~
&|^和逻辑运算符一样,即&|^两侧为布尔值,就是逻辑操作。如果两侧是整数就是按位操作。不能同时拿布尔和整数使用
位运算是对整数的二进制位进行运算。