上篇说到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. KendoUI 基础:Grid 绑定template展示

    Grid 绑定template展示 <div id="TodayEditorGrid" style="margin:0 10px"></div ...

  2. 【java设计模式】【行为模式Behavioral Pattern】策略模式Strategy Pattern

    package com.tn.策略模式; public class Client { private Strategy strategy; public void setStrategy(Strate ...

  3. Python云端系统开发入门——框架基础

    Django框架基础 这是我学习北京理工大学嵩天老师的<Python云端系统开发入门>课程的笔记,在此我特别感谢老师的精彩讲解和对我的引导. 1.Django简介与安装 Django是一个 ...

  4. 简述ES6其他的东西

    第一是修饰器是ES7的一个提案,现在Babel转码器已经支持.那么什么是修饰器呢,修饰器是对类的行为的改变,在代码编译时发生的,而不是在运行时发生的且修饰器只能用于类和类的方法.修饰器可以接受三个函数 ...

  5. 【实验手册】使用Visual Studio Code 开发.NET Core应用程序

    .NET Core with Visual Studio Code 目录 概述... 2 先决条件... 2 练习1: 安装和配置.NET Core以及Visual Studio Code 扩展... ...

  6. bzoj 4898: [Apio2017]商旅

    Description 在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴.你被这个城市发达而美丽的市场所 深深吸引,决定定居于此,做一个商人.科巴有个集市,集市用从1到N的整数编号 ...

  7. 《重新定义公司 - Google 是如何运营的》重点摘录

      赋能:创意时代的组织原则 未来企业的成功之道,是聚集一批聪明的创意精英,营造合适的氛围和支持环境,充分发挥他们的创造力,快速感知用户需求,愉快地创造响应的产品和服务.未来组织的最重要功能,那就是赋 ...

  8. Linux根目录详解-转自鸟哥的私房菜

    转自:http://myhat.blog.51cto.com/391263/107931/   *根目录(/)的意义与内容: 根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的 ...

  9. DataInputStream EOFEXCEPTION

    在编写socket通信时,服务端使用了DataInputStream.readUTF()读取字节流时,出现EOFEXCEPTION 原因是客户端没有使用DataOutputStream.writeUT ...

  10. C/C++调用Golang 一

    C/C++调用Golang 一 (开发环境: 操作系统: windows 7 32位操作系统 C++: visual studio 2010 Golang:go version go1.9 windo ...