上篇说到Java中的变量与常量,接下来就是简单的计算了,首先需要了解一下Java中的运算符。

六、运算符

  1. 赋值运算符

  赋值运算符即“=”,是一个二元运算符(即对两个操作数进行处理),其功能是将右方操作数所含的值赋值给左方的操作符。其中左方必须是一个变量,而右边所赋的值可以使任何数值或表达式,例子如下:

int a = 10;           // 将10赋给a
int b = 5; // 将5赋给b
int c = a+b; // 将变量a和b进行运算后的结果赋给c

  也可先定义变量再进行赋值运算,如:

int a, b, c;                // 声明int型变量a、b、c
a = 10; // 将10赋值给变量a
c = b = a + 5; // 将a+5赋值给变量b、c

  在Java中可以把赋值运算连在一起使用,比如上方b、c的运算结果都为15。

  2. 算数运算符

  Java中的算数运算符主要有+、-、*、/和%,分别为加、减、乘、除和求余,都是二元运算符。注意除法运算时,0不能作为除数。

 public class Arith {

          public static void main(String[] args) {
float num1 = 52.56f; // 声明float型变量并赋值
int num2 = 512; // 声明int型变量并赋值 System.out.println("num1 + num2 = " + (num1 + num2)); // 将变量相加并输出
System.out.println("num2 - num1 = " + (num2 - num1)); // 将变量相减并输出
System.out.println("num1 * num2 = " + num1 * num2); // 将变量相乘并输出
System.out.println("num1 / num2 = " + num1 / num2); // 将变量相除并输出
}
}

运行结果如下:

  3. 自增和自减运算符

  自增、自减运算符是单目运算符(只有一个操作数),可以放在操作数之前,也可以放在操作数之后。操作数必须是一个整型或浮点型变量。自增自减的作用是将变量的值加一或减一,放在操作数前后的作用不同,考试中最常出现的考题之一,需加以区分。

  若自增(自减)运算符在操作数之前,如++a(--a)表示先使a的值加一(减一),再使用变量;若自增(自减)运算符在操作数之后,如--a(--a)表示先使用变量a,再对其进行加一(减一)操作,下面看一个例子:

 public class Example {

     public static void main(String[] args) {
int a; // 声明变量a a = 4; // 赋值为4
System.out.println("++a后的值为:" + ++a); // 输出++a的值 a = 4; // 同样赋值为4(重新赋值,放止a的值已经发生改变)
System.out.println("a++后的值为:" + a++); // 输出a++的值
} }

  不妨先猜测一下结果是什么,运行结果如下:

  

  为什么会出现两个不同的答案呢?a的值为4,++a相当于先对a进行自增再输出,也就是执行输出时,a的值已经变为5了;而a++相当于先输出a的值再自增,也就是先输出a的值为4,然后再对a进行自增,此时a为5,但4已经输出了,所以会出现这两个结果。

  4. 比较运算符

  比较运算符属于二元运算符,用于变量与变量之间、变量与常量之间及其它类型的信息之间的比较,运算结果是boolean型,当运算符对应关系成立时,运算结果为true,否则结果为false。

  常见比较运算符有>(比较左是否大于右)、<(比较左是否小于右)、>=(比较左是否大于等于右)、<=(比较左是否小于等于右)、==(比较左是否等于右)、!=(比较左是否不等于右)。这里要特别注意,“=”是赋值运算符,“==”才是比较运算符。

 public class Compare {

     public static void main(String[] args) {
int num1 = 4;
int num2 = 5; System.out.println("4<5: " + (num1 < num2)); // 判断4小于5是否成立
System.out.println("4>5: " + (num1 > num2)); // 判断4大于5是否成立
System.out.println("4==5: " + (num1 == num2)); // 判断4等于5是否成立
System.out.println("4!=5: " + (num1 != num2)); // 判断4不等于5是否成立
System.out.println("4>=5: " + (num1 >= num2)); // 判断4大于等于5是否成立
System.out.println("4<=5: " + (num1 <= num2)); // 判断4小于等于5是否成立
} }

  上述程序的运行结果如下:

  

  5. 逻辑运算符

  逻辑运算符包括&&(&)(逻辑与)、||(|)(逻辑或)和!(逻辑非),返回值为布尔类型,操作元也必须是布尔类型数据。其中除了“!”是一元运算符外,其余的都是二元运算符。逻辑与是左右两个表达式都为true,逻辑结果才为true;逻辑或是左右两个表达式有一个或两个表达式为true时,逻辑结果才为true。

  这里就有个小知识点了,&&(||)和&(|)有什么区别呢?

  以“&&”和“&”为例,这两个符号都是逻辑与,当左右两个表达式都为true时,逻辑结果才为true。使用“&”时,左右两边都会判断;而使用“&&”时,如果“&&”左边的表达式结果为false,那么计算机就不会再判断右边的结果了,直接返回逻辑结果为false,这就是它们的区别。“||”则是左边判断为true时,就不会再判断右边,而“|”两边都会判断。使用“&&”和“||”可以节省计算机判断的次数,提高效率,通常被称为“短路”,而“&”和“|”被称为“非短路”。

  6. 位运算符

  位运算符用于处理整型和字符型的操作数,对其内存进行操作,数据在内存中以二进制形式表示(这里二进制的表示不做过多说明,相信学计算机的朋友们都非常了解二进制存储及数据表示)。主要有~(按位取反)、&(按位与)、|(按位或)、^(安慰异或)、<<(左移)、>>(右移)、>>>(无符号右移)。

  至于运算方法这里就不多赘述了,Java语言可以利用这几个位运算符帮我们进行复杂的二进制运算,得到我们想要的结果,如 48<<1 就是将48的二进制数向左移1位,结果为96。移位可实现整数除以或乘以2的n次方的效果,例如 y<<2 与y*4的结果相同,4就是2的二次方, y>>1 与y/2的结果相同,2为2的一次方。所以总结起来就是——左乘右除。

  7. 三元运算符

  三元运算符是Java中唯一一个三目运算符,操作数有三个,如 boolean b = 50 < 30 ? true : false; ,解释一下这句代码,首先定义一个布尔型变量b,=右边是一个三元运算符,先判断50是否小于30,如果成立,则结果为“:”左边的值(true),如果不成立,结果为“:”右边的值(false),然后将得出的值赋给=左边的b。再比如下面这个例子:

int i = 21;
int j = 47;
int z = i<j ? 100 : 200;

  这里首先判断i<j是否成立,如果成立,z的值就是100,如果不成立,z的值就是200,因为21<47成立,所以z=100。

  8. 运算符优先级

  Java中表达式就是使用运算符连接起来的符合Java规则的式子,运算符的优先级决定了表达式中运算执行的先后顺序。下面是一张运算符优先级的表:

优先级 运算符
1 ( )
2 +、-
3 ++、--、!
4 *、/、%
5 +、-
6 >>、>>>、<<
7 <、>、>=、<=
8 ==、!=
9 &
10 ^
11 |
12 &&
13 ||
14 ? :
15 =

  如果两个运算符有相同的优先级,那么左边的表达式要比右边的先处理。

七、类型转换

  1. 自动类型转换

  Java中的8中基本类型可以混合使用,那必然会出现一个类型转换的问题,不同类型的数据在运算过程中首先会自动转换为同一类型再进行运算。自动类型转换遵循低级到高级转换的规则(占用空间越小级别越低)。

  例如:

float num1 = 45f;
int num2 = 120;
System.out.println(num1 + num2);

  这里系统首先将int型变量转换成float型变量之后再相加,所以输出为float型,结果是165.0。隐式转换规则见下表:

操作数1的数据类型 操作数2的数据类型 转换后的数据类型
byte、short、char int int
byte、short、char、int long long
byte、short、char、int、long float float
byte、short、char、int、long、float double double

  2. 强制类型转换

  当把高精度的变量的值赋给低精度的变量时,必须使用显式类型转换运算(又称强制类型转换),如把double、float型转换成int、long型如下:

int a = (int)42.56;            // 此时a输出为42
long b = (long)467.5f // 此时b输出为467

  但要注意的是,不可超出变量的取值范围,否则会数据溢出,如下方代码,由于byte型变量最大值为127,而427已经超出其取值范围,因此会发生数据溢出,造成了数据的丢失。boolean型不能转换。

short s = 427;
byte b = (byte)s;

  

  以上就是Java语言基础的所有内容,下一篇将介绍Java中的流程控制。

Java入门篇(二)——Java语言基础(下)的更多相关文章

  1. Java入门篇(六)——类和对象

    写到这里终于写到了入门篇的最后一个知识点了.类和对象是Java中经常被提到的两个词汇,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语 ...

  2. Java入门(二)——果然断更的都是要受惩罚的。。。

    断更了一个多月,阅读量立马从100+跌落至10-,虽说不是很看重这个,毕竟只是当这个是自己的学习笔记,但有人看,有人评论,有人认同和批评的感觉还是很巴适的,尤其以前有过却又被剥夺的,惨兮兮的. 好好写 ...

  3. 【转】java提高篇(二)-----理解java的三大特性之继承

    [转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...

  4. java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  5. (转)java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  6. Java入门(二):注释和基本数据类型

    上次通过eclipse在控制台输出了hello world,是不是有点小激动啊,今天接着介绍Java基础知识. 一.Java注释 1.Java注释语句不会被编译器运行,不用担心代码因为许多注释语句显得 ...

  7. Java 入门课程视频实战-0基础 上线了,猜拳游戏,ATM实战,欢迎围观

    Java 入门课程视频实战-0基础 已经上传完了.欢迎小伙伴们过来围观 直接进入: http://edu.csdn.net/course/detail/196 课程文件夹例如以下: 1 初识Java  ...

  8. Hadoop生态圈-Hive快速入门篇之HQL的基础语法

    Hadoop生态圈-Hive快速入门篇之HQL的基础语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的重点是介绍Hive中常见的数据类型,DDL数据定义,DML数据操作 ...

  9. java提高篇-----理解java的三大特性之封装

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  10. Java总结篇:Java多线程

    Java总结篇系列:Java多线程 多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: ...

随机推荐

  1. 事务处理操作(COMMIT,ROLLBACK)。复制表。更新操作UPDATE实际工作中一般都会有WHERE子句,否则更新全表会影响系统性能引发死机。

    更新操作时两个会话(session)同时操作同一条记录时如果没有事务处理操作(COMMIT,ROLLBACK)则会导致死锁. 复制表:此方法Oracle特有

  2. iOS APP跳转设置界面以及设置中的其他界面

    1.跳转设置总页面(iOS10+以及之前的都可以用:ios10+ 是跳转到了应用到设置界面) [[UIApplication sharedApplication]openURL:[NSURL URLW ...

  3. [Maven] Missing artifact

    今天从朋友那拷过来一个maven工程,eclipse中maven配置好了,maven仓库也配置完毕,但是一直报Missing artifact,然后开网执行maven update,下载完jar后,还 ...

  4. 【USACO】玉米实验(单调队列)

    Description 约翰决定培育新的玉米品种以提高奶牛的产奶效率.约翰所有的土地被分成 N ×N 块,其中第 r行第 c 列的玉米质量为 Ar,c.他打算找一块质量比较均匀的土地开始自己的实验.经 ...

  5. du 命令详解

    du : show disk usage  作用:统计目录或文件所占用磁盘空间的大小. 语法:du 参数 选项 参数: -a 为每个制定文件显示磁盘使用情况, 或者为目录中每个文件显示各自磁盘使用情况 ...

  6. Web API系列之三 基本功能实现

    Web API系列之二讲解了如何搭建一个WebApi的基架,本文主要在其基础之上实现基本的功能.下面开始逐步操作: 一.配置WebApi的路由-用于配置外部如何访问内部资源的url的规则 1.添加Gl ...

  7. css实现一行居中显示,两行靠左显示,超过两行以引号省略

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. [编织消息框架][消息服务]rmi

    RMI(即Remote Method Invoke 远程方法调用) 远程对象: 用于远程客户端调用 必需继承java.rmi.Remote,每个调用方法必须添加java.rmi.RemoteExcep ...

  9. 深入理解 Python 异步编程(上)

    http://python.jobbole.com/88291/ 前言 很多朋友对异步编程都处于"听说很强大"的认知状态.鲜有在生产项目中使用它.而使用它的同学,则大多数都停留在知 ...

  10. 二:mysql安装配置、主从复制配置详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8213723.html 邮箱:moyi@moyib ...