Java入门篇(二)——Java语言基础(下)
上篇说到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语言基础(下)的更多相关文章
- Java入门篇(六)——类和对象
写到这里终于写到了入门篇的最后一个知识点了.类和对象是Java中经常被提到的两个词汇,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语 ...
- Java入门(二)——果然断更的都是要受惩罚的。。。
断更了一个多月,阅读量立马从100+跌落至10-,虽说不是很看重这个,毕竟只是当这个是自己的学习笔记,但有人看,有人评论,有人认同和批评的感觉还是很巴适的,尤其以前有过却又被剥夺的,惨兮兮的. 好好写 ...
- 【转】java提高篇(二)-----理解java的三大特性之继承
[转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- (转)java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- Java入门(二):注释和基本数据类型
上次通过eclipse在控制台输出了hello world,是不是有点小激动啊,今天接着介绍Java基础知识. 一.Java注释 1.Java注释语句不会被编译器运行,不用担心代码因为许多注释语句显得 ...
- Java 入门课程视频实战-0基础 上线了,猜拳游戏,ATM实战,欢迎围观
Java 入门课程视频实战-0基础 已经上传完了.欢迎小伙伴们过来围观 直接进入: http://edu.csdn.net/course/detail/196 课程文件夹例如以下: 1 初识Java ...
- Hadoop生态圈-Hive快速入门篇之HQL的基础语法
Hadoop生态圈-Hive快速入门篇之HQL的基础语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的重点是介绍Hive中常见的数据类型,DDL数据定义,DML数据操作 ...
- java提高篇-----理解java的三大特性之封装
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- Java总结篇:Java多线程
Java总结篇系列:Java多线程 多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: ...
随机推荐
- [知了堂学习笔记]_用JS制作《飞机大作战》游戏_第1讲(素材查找和界面框架搭建)
一.查找素材: 二.分析游戏界面框架: 登录界面.游戏界面.暂停游戏界面.玩家死亡后弹出界面:并对应的界面包含什么元素: 三.分别搭建以上四个界面: 1.登录界面与游戏界面框架(隐藏游戏界面,四个界面 ...
- 优化设计提高sql类数据库的性能
前言 在一个项目中,技术的统一性是最重要的,数据库的设计则是重点中的重点.NoSQL 是目前最流行的数据库,但是其实用性和功能性远不如sql数据库. 实际很多SQL数据库被诟病的性能问题大多是源于程序 ...
- 点击盒子选中里面的单选框,并给盒子添加相应样式,美化单选框、复选框样式css用法,响应式滴
pc效果图: 移动端效果图: 代码直接上: <!DOCTYPE html> <html> <head> <meta http-equiv="Cont ...
- 关于 dos 下 npm 命令的使用
npm install 可以安装模块,后面跟 -g 安装全局的,后面跟包的名字就是安装指定的包 npm uninstall <安装包的名字> 卸载某个包,后面跟 -g 是卸载全局的某个包 ...
- MySQL数据库学习: 01 —— 数据库的概述
壹 概述 一 了解SQL 1.1 数据库基础 1.1.1 什么是数据库 数据库(database)保存有组织的数据的容器(通常是一个文件或一组文件). 易混淆:人们常常用“数据库”这个词语来代表他们使 ...
- 快速恢复开发环境(系统还原后的思考,附上eclipse注释的xml配置文件)
1.Eclipse/Myeclipse的工作空间,不能放在系统盘 除非你的项目都有实时的云同步或SVN等,才能放在系统固态盘,不然你享受快速启动项目的同时,也需要承担系统奔溃后找不回项目的风险: 公司 ...
- Head First设计模式之组合模式
一.定义 将对象组合成树形结构来表现"整体-部分"层次结构. 组合能让客户以一致的方法处理个别对象以及组合对象. 主要部分可以被一致对待问题. 在使用组合模式中需要注意一点也是组合 ...
- Nginx 学习笔记(七)如何解决nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
出现:nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) 错误,有以下两种情况 1.80端口被占用 2.ipv4端 ...
- Netty之多用户的聊天室(三)
Netty之多用户的聊天室(三) 一.简单说明 笔者有意将Netty做成一个系列的文章,因为笔者并不是一个善于写文章的人,而且笔者学习很多技术一贯的习惯就是敲代码,很多东西敲着敲着就就熟了,然后再进行 ...
- linux系统编程:自己动手写一个who命令
who命令的作用用于显示当前有哪些用户登录到系统. 这个命令执行的原理是读取了系统上utmp文件中记录的所有登录信息,直接显示出来的 utmp文件在哪里呢? man who的时候,在手册下面有这么一段 ...