Java中的操作符、表达式和语句


Java中的操作符、表达式和语句

文章插图

JAVA中的操作符
Java是一门静态强类型的语言,因此如果操作符接收的值的类型不符合操作符规定的类型,就会在编译期产生编译错误,通常IDE会对这种情况进行提示,所以Java的操作符不会跟JavaScript中的操作符那样发生很多的类型转换,其行为更具有确定性,所以只需要进行简单的介绍 。
运算符说明Java运算符分隔符. [] (){} , ;单目运算符++ -- - !强制类型转换符(type)乘/除/求余* / %加/减+ -位移运算符<< >> >>>关系运算符< <= >= > instanceof等价运算符== !=按位与&按位异或^按位或|条件与&& (短路)条件或|| (短路)三目运算符?:赋值= += -=*= /= &=|= ^= %=<<= >>= >>>=
特别注意==和!=
==和!=这两个操作符用来进行相等性的判断,但是需要注意的是,这类似于一个全等操作,对于基本类型的值来说没有任何问题,但是对于引用类型的值来说,应该采用对象内部的equals()方法来进行比较 。
Java中的表达式和合法的语句
在程序设计语言中,表达式和语句是完全不同的两个概念,在我的理解中:
  • 表达式是有值的,任何一个表达式计算完成之后都会返回一个结果值
  • 语句是一段可执行的代码,它不一定有值 。
  • 表达式本身是可以作为语句存在的,我们称之为表达式语句 。
通过上面的介绍,我们可以认为表达式是语句的一种特殊情况,表达式是具有值的语句
同时,我们需要注意,在很多时候,我们提到语句的时候一般认为语句是没有值的,这种情况下的语句被狭义化了 。
使用表达式的目的和合法的语句
程序中的许多动作都是通过计算表达式而完成的,计算一个表达式要么是为了他们的副作用,例如对变量赋值;要么是为了得到他们的值,将其用做更大的表达式的引元或操作数,要么用来改变语句的执行顺序(如if中接收bool值进行流程控制),或者是同时为了这两个目的
基于这个原因,很多的编程语言中如果一个表达式不满足使用表达式的目的,那么这个表达式就不能作为一条单独的语句存在,也就是说不能运行这个表达式,因为这其实是没有任何意义的,在Java中就是这样的,如下:
int a = 0;int b = 1;a+b; //ERROR,是一个正确的表达式,但是由于不能满足使用表达式的目的,把他作为一个语句执行没有任何意义,所以Java认为这不是一个合法的语句 。复制代码同时我们需要注意,赋值语句在Java中被认为是表达式,所以赋值语句是有值的,如下:
public static void main(String[] args) { int a = 0; System.out.println(a = 3+2); //5 System.out.println(a); //5}复制代码语句
我们接下来要讨论的语句就是被狭义之后的语句,主要的功能是用于控制程序的执行流程 。
程序的三种基本结构
无论我们使用哪种编程范式(无论是结构化编程范式,面向对象的编程范式还是函数式编程范式),书写算法都是必须的,而算法的实现过程是由一系列操作组成的,这些操作之间的执行次序就是程序的控制结构 。
在以前,很多编程语言都提供了goto语句,goto语句非常灵活,可以让程序的控制流程任意流转 。但是goto语句太随意了,大量使用goto语句会使得程序难以理解并且容易出错 。
1996年,计算机科学家Bohm和Jacopini证明了这样的事实:**任何简单或者复杂的算法都可以有顺序结构,分支(选择)结构和循环结构这三种基本结构组合而成 。**所以这三种结构就被称为程序设计的三种基本结构 。
不论哪一种编程语言,都会提供两种基本的流程控制结构:分支结构和循环结构 。
其中分支结构用于实现根据条件来选择性地执行某段代码,循环结构则用于实现根据循环条件重复执行某段代码,通过这两种控制结构,就可以改变程序原来顺序执行的顺序,实现流程的控制进而实现任意复杂的算法 。
Java中也为我们提供了分支和循环语句,同时还提供了其他的一些语句用来更加灵活的控制程序流程 。
顺序结构
任何编程语言中最常见的程序结构就是顺序结构 。顺序结构就是程序从上到下逐行地执行,中间没有任何判断和跳转 。
如果一个方法的多行代码之间没有任何流程控制,则程序总是从上向下依次执行,排在前面的代码先执行,排在后面的代码后执行 。这意味着,没有流程控制,Java中方法的语句是一个顺序执行流,从上向下依次执行每一条语句


推荐阅读