[Java 基础]运算符和表达式
2017-09-01 09:53
127 查看
Java运算符
右值可以是任意的常量、变量或表达式(只要可以生成一个值)。
左值必须是一个明确的、已命名的变量。
public class Test {
public static void main(String[] args) {
int num = 10;
System.out.println("num = " + num);
num = 20;
System.out.println("num = " + num);
}
}
与C/C++一样,JAVA也支持同时进行运算和赋值操作符的简化写法。
以下两种写法是等价的:
num = num + 20; //num加20,然后赋值给num
num += 20; //num加20,然后赋值给num
int x = -10; //把负数-10赋值给x
int y = +10; //把正数10赋值给y,一般+省略
System.out.println("x = " + x);
System.out.println("y = " + y);
自减操作符是--。
例:++a 等价于 a = a+1;
自增和自减操作都可以分为前缀式和后缀式。
以自增为例,
int x = 1;
int y = 1;
System.out.println("x = " + ++x); //前缀式
System.out.println("y = " + y++); //后缀式
Output:
x = 2
y = 1
由此可见,前缀式是先递增,然后再代入表达式;而后缀式是先代入表达式,再对自身进行递增运算。
如果关系是真的,关系表达式的结果为 true;反之,结果为 false。
关系操作符包括小于(<)、大于(>)、小于或等于(<=)、大于或等于(>=)、等于(==)以及不等于(!=)。
int result1 = 1 + 2 + 3 * 4 - 5;
int result2 = (1 + 2 + 3) * 4 - 5;
System.out.println("1 + 2 + 3 * 4 - 5 = " + result1);
System.out.println("(1 + 2 + 3) * 4 - 5 = " + result2);
Output:
1 + 2 + 3 * 4 - 5 = 10
(1 + 2 + 3) * 4 - 5 = 19
(布尔表达式)? 值A : 值B
如果布尔表达式的值为true,则结果为值A;反之,结果为值B。
public static int GetMaxNum(int x, int y) {
return (x >= y) ? x : y;
}
public static void main(String[] args) {
int x = 5;
int y = 20;
System.out.println("The max of " + x + " and " + y + " is : " + GetMaxNum(x, y));
}
注:Java中只有一个三元操作符。
(10)直接常量
一般说来,程序中使用了”直接常量“,编译器可以准确地知道要生成什么样的类型,但有时候却是模棱两可的。
直接常量后面的后缀字符可以标志它的类型。
若为大写(或小写)的 L ,表示 long 型。
若为大写(或小写)的 F ,表示 float 型。
若为大写(或小写)的 D ,表示 double 型。
十六进制数适用于所有整数数据类型,以前缀为 0x(或0X),后面跟随0~9或大小写的a~f。
八进制数由前缀0以及后续的0~7的数字来表示。
public class Test{
public static void main(String args[]){
long l = 123L; // long型:后缀为大写或小写的L
float f = 12.3f; // float型:后缀为大写或小写的F
double d = 54.345d; // double型:后缀为大写或小写的D
int x = 0xffffffff; // 十六进制数:前缀为0x,后续用0~9,a~f的数字来表示
char c = 017; // 八进制数:前缀为0,后续用0~7的数字来表示
}
};
当多个运算符出现在同一个表达式中,会存在一个问题:谁先谁后呢?
这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
例如,(1+3)+(3+2)*2,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。
再如,x = 7 + 3 * 2;这里x得到13,而不是20,因为乘法运算符比加法运算符有较高的优先级,所以先计算3 * 2得到6,然后再加7。
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
例
如下是一个简单的算术表达式语句
x = 2 + 3;
http://www.w3cschool.cc/java/java-operators.html
(1)赋值操作符
赋值操作符(=)表示:取右边的值(即右值),把它复制给左边(即左值)。右值可以是任意的常量、变量或表达式(只要可以生成一个值)。
左值必须是一个明确的、已命名的变量。
public class Test {
public static void main(String[] args) {
int num = 10;
System.out.println("num = " + num);
num = 20;
System.out.println("num = " + num);
}
}
(2)算术操作符
加号(+)、减号(-)、乘号(*)、除号(/)、取模(%)与C/C++一样,JAVA也支持同时进行运算和赋值操作符的简化写法。
以下两种写法是等价的:
num = num + 20; //num加20,然后赋值给num
num += 20; //num加20,然后赋值给num
(3)一元操作符
一元加号(+)、一元减号(-)表示数值的正负。int x = -10; //把负数-10赋值给x
int y = +10; //把正数10赋值给y,一般+省略
System.out.println("x = " + x);
System.out.println("y = " + y);
(4)自增与自减操作符
自增操作符是++。自减操作符是--。
例:++a 等价于 a = a+1;
自增和自减操作都可以分为前缀式和后缀式。
以自增为例,
int x = 1;
int y = 1;
System.out.println("x = " + ++x); //前缀式
System.out.println("y = " + y++); //后缀式
Output:
x = 2
y = 1
由此可见,前缀式是先递增,然后再代入表达式;而后缀式是先代入表达式,再对自身进行递增运算。
(5)关系操作符
关系操作符生成的是一个 boolean 结果,它们计算的是操作数的值之间的关系。如果关系是真的,关系表达式的结果为 true;反之,结果为 false。
关系操作符包括小于(<)、大于(>)、小于或等于(<=)、大于或等于(>=)、等于(==)以及不等于(!=)。
(6)逻辑操作符
逻辑操作符包括与(&&)、或(||)、非(!),它们根据参数的逻辑关系,生成一个boolean值。(7)括号操作符
括号操作符(),可以提高括号中表达式的执行优先级。int result1 = 1 + 2 + 3 * 4 - 5;
int result2 = (1 + 2 + 3) * 4 - 5;
System.out.println("1 + 2 + 3 * 4 - 5 = " + result1);
System.out.println("(1 + 2 + 3) * 4 - 5 = " + result2);
Output:
1 + 2 + 3 * 4 - 5 = 10
(1 + 2 + 3) * 4 - 5 = 19
(8)位操作符
按位与(&)、按位或(|)、异或(^)、取反(~)、左移(<<)、右移(>>)、无符号右移(>>>)(9)三元操作符
三元操作符比较特殊,它有三个操作数。它的格式为:(布尔表达式)? 值A : 值B
如果布尔表达式的值为true,则结果为值A;反之,结果为值B。
public static int GetMaxNum(int x, int y) {
return (x >= y) ? x : y;
}
public static void main(String[] args) {
int x = 5;
int y = 20;
System.out.println("The max of " + x + " and " + y + " is : " + GetMaxNum(x, y));
}
注:Java中只有一个三元操作符。
(10)直接常量
一般说来,程序中使用了”直接常量“,编译器可以准确地知道要生成什么样的类型,但有时候却是模棱两可的。
直接常量后面的后缀字符可以标志它的类型。
若为大写(或小写)的 L ,表示 long 型。
若为大写(或小写)的 F ,表示 float 型。
若为大写(或小写)的 D ,表示 double 型。
十六进制数适用于所有整数数据类型,以前缀为 0x(或0X),后面跟随0~9或大小写的a~f。
八进制数由前缀0以及后续的0~7的数字来表示。
public class Test{
public static void main(String args[]){
long l = 123L; // long型:后缀为大写或小写的L
float f = 12.3f; // float型:后缀为大写或小写的F
double d = 54.345d; // double型:后缀为大写或小写的D
int x = 0xffffffff; // 十六进制数:前缀为0x,后续用0~9,a~f的数字来表示
char c = 017; // 八进制数:前缀为0,后续用0~7的数字来表示
}
};
(11)不同于C/C++,在JAVA中没有sizeof操作符
运算符的优先级和结合性
当多个运算符出现在同一个表达式中,会存在一个问题:谁先谁后呢?
这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
例如,(1+3)+(3+2)*2,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。
再如,x = 7 + 3 * 2;这里x得到13,而不是20,因为乘法运算符比加法运算符有较高的优先级,所以先计算3 * 2得到6,然后再加7。
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
类别 | 操作符 | 关联性 |
后缀 | () [] . (点操作符) | 左到右 |
一元 | + + - !〜 | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | >> = << = | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
&& | 左到右 | |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |
表达式
所谓表达式,是指由常量、变量或是操作数与运算符所组合而成的语句。例
如下是一个简单的算术表达式语句
x = 2 + 3;
参考资料
Java编程思想http://www.w3cschool.cc/java/java-operators.html
相关文章推荐
- Java基础程序设计笔记-- 运算符、表达式与语句
- [零基础学JAVA]Java SE基础部分-03. 运算符和表达式
- Java 入门(二)数据类型 运算符 表达式 -------程序设计的静态基础
- java语言基础【java运算符和表达式】
- java基础之运算符表达式,语句
- 01-Java基础知识:数据类型与变量、标识符、运算符、表达式
- [Java 基础]运算符和表达式
- Java语言基础{Java_se(02)}-字面量和常量-变量的基本定义和使用-Java表达式-数据类型和分类-基本数据类型的转换-算数运算符-赋值运算符-比较运算符-三元运算符-逻辑运算符
- G笔记_Java基础(变量、基本类型、运算符和表达式-1)
- java 从零开始,学习笔记之基础入门<运算符表达式和流程控制>(六)
- java基础学习——变量,java基本类型,运算符和表达式笔试题
- Java语言基础-4.运算符与表达式
- G笔记_Java基础(变量、基本类型、运算符和表达式-1)[案例]
- 黑马程序员--JAVA基础之运算符与表达式
- java基础知识-----运算符表达式和分支结构
- 磨刀不误砍材工 - Java的基础语言要素(运算符和表达式的应用)
- 基础篇--03 Java运算符、表达式、分支结构
- java 正则表达式基础知识
- 数据类型,运算符和表达式02 - 零基础入门学习C语言03
- Java基础视频教程第25天_正则表达式