云栖社区专家系列课——Java必修课第四讲

简介: Java必须课是零基础Java学习者的入门课程,涵盖了Java初学者应该掌握的所有核心知识。在第四讲中,最课程创始人、微软MVP陆敏枝详细讲解了基础类型转换、char类型运算、关系运算符、逻辑运算符、位运算符等基础类型之间的运算关系,并结合利息计算器应用案例将前几讲学习的知识点进行串联。

Java必须课是零基础Java学习者的入门课程,涵盖了Java初学者应该掌握的所有核心知识。在第四讲中,最课程创始人、微软MVP陆敏枝详细讲解了基础类型转换、char类型运算、关系运算符、逻辑运算符、位运算符等基础类型之间的运算关系,并结合利息计算器应用案例将前几讲学习的知识点进行串联。


课程基本信息

开课时间:每周四下午:1400-1530

主讲人:云栖社区专家,陆敏枝

Java必修课在线直播视频链接:

https://yq.aliyun.com/video/play/1492

点击此处下载本节教学课程

 

本课程重点内容

本节课程主要讲解基础类型转换、char类型运算、关系运算符、逻辑运算符、位运算符等数据类型之间的运算关系,具体内容如下:

一、基础类型转换:自动转换和强制转换

数据类型转换通常发生在不同数据类型的数据之间运算时:

·自动转换:从低精度->高精度byteshortintlongfloatdouble

·强制转换:从高精度->低精度,则要类型强制转换。

自动转换和强制转换的示例代码如下:

Public class OperatorTester{
public static void main(String[] args){
int a = 3;
float c = 5.17f;
c=a;//自动转换
System.out.println(c);//
a=(int)c;//强制转换
System.out.println(a);
}
} 

二、关于char的运算

Javachar类型的运算要注意以下三点:

·char与整型进行算术运算后,结果会自动提升成int类型;

·两个char型运算时,自动转换为int型;

·当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换。

Public class OperatorTester01{
public static void main(String[] args){
char c1 = 'a'; // 对应97
int f = c1 + 10;
System.out.println("char与整型进行运算: 'a' + 10 = " + f);
//char类型之间运算
char c2 = 'b';  // 对应98
System.out.println("两个char相加: 'a' + 'b' = " + (c1 + c2)); 
//char与其他类型之间的运算
double db = c1 + 1.1d;//双精度double
System.out.println("char与别的类型相加 : 'a' + 1.1d = " + db);}
}

程序输出:

char与 整型进行运算: 'a' + 10 = 107

两个char相加: 'a' + 'b' = 195

char与别的类型相加 : 'b' + 1.1d = 98.1

ASC码表中规定了char类型与整数值的对应关系,具体关系如图:

853e8ee48a5ffb059239d37edd416382758c2630 

注:在运算中,括号是最高优先级,如上述代码中字符串相加时,System.out.println("两个char相加: 'a' + 'b' = " + (c1 + c2));去掉括号后变成字符串相加,输出结果为ab

 

三、关系运算符

关系运算符用于比较两个数据之间的关系,比较结果为Boolean类型的值。关系运算符包括:等于==、不等于!=、大于>、大于等于>=、小于<、小于等于<=。以下为关系运算符示例代码:

public static void m3() {
int a = 1;
int b = 3;
int c = 3;
float d = 3.0f;
char c1 = 'a';
char c2 = 'b';
System.out.println("1 == 3 吗," + ( a == b));
System.out.println("3 == 3 吗," + ( b == c));
System.out.println("3 == 3.0 吗," + ( c == d));
System.out.println("1 != 3 吗," + ( a != b));
System.out.println("3 > 1 吗," + ( b > a));
System.out.println("3 >= 3 吗," + ( b >= a));
System.out.println("3 < 1 吗," + ( b < a));
System.out.println("3 <= 1 吗," + ( b <= a));
System.out.println("'a' <= 'b' 吗," + ( c1 < c2));
}

输出结果为:

1 == 3 吗,false

3 == 3 吗,true

3 == 3.0 吗,true

1 != 3 吗,true

3 > 1 吗,true

3 >= 3 吗,true

3 < 1 吗,false

3 <= 1 吗,false

'a' <='b' 吗,true

注意:

1== 号和 = 的区别;

2char类型同样可以比较大小。

 

四、逻辑运算符

在上文中我们比较了整数、小数、字符,唯独没有比较布尔型数据。为了比较布尔类型数据,我们来讲解下逻辑运算符。逻辑运算符要求操作数的数据类型为boolean类型,其运算结果也是boolean类型,包括:逻辑与'&&'、逻辑或'||'、逻辑非'!'、逻辑异或'^'、逻辑与'&'、逻辑或'|'

逻辑运算符示例代码:

Public class OperatorTester03{
public static void main(String[] args){
boolran a= true;
boolran a=false;
System.out.println("a && b"+(a&&b));
System.out.println("a || b"+(a||b));
System.out.println("!a" +(!a));
System.out.println("a ^ b"+(a^b));
System.out.println("a & b"+(a&b));
System.out.println("a | b"+(a|b));
}
}

运算结果:

a&&b=false

a||b=true

!a=false

a^b=true

a&b=true

a|b=true

下图为逻辑运算符的真值表,初学者可以根据真值表判断逻辑计算的结果:

9d3f37a44c6da93c379b61bc9e7d33d744bf4bc1 

AB是逻辑运算的两个逻辑变量,从真值表中可以看出:

1A&&B A&B 结果完全相同,而 A||BA|B结果也完全相同;

2对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;因此,&&的效率就比&高,因为&进行了一些无用的并且还不影响结果的计算。

3对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。因此,||的效率就比|高,因为&进行了一些无用的并且还不影响结果的计算。

A||BA&&B这种提前结束的行为叫做:短路。

 

五、位运算符

在讲解位计算符之前,首先需要了解进制的概念:

1、十进制计算方法

1e0a6b1972f01896eb8064fb98bb544b3d96f5f1 

2、二进制计算方法

d2741e315956136214c4b32bae5ae65dbe7382f9 

 

15 & 6

位运算代码示例

Public class OperatorTester04{
public static void main(String[] args){
int x = 15;
int y = 6;
int z = 0;
//x等于二进制数的00001111
//y等于二进制数的00000110
//&等于二进制数的00000110= 2^2 + 2^1=6
  z = x & y;
System.out.println("x & y = " + z);
}
}

输出结果为:6

原理图:

046e54591d115d2fdfe8309faef43dce672a2fc5 

3、位运算

位运算是对整数值进行二进制运算。位运算标识符包括:位与'&',位或'|',位非'~',位异或'^',右移'>>',左移'<<'0填充的右移'>>>'

·&运算:对二进制的位求与,参考真值表

·| 运算:对二进制的位求或,参考真值表

·~运算:求非

·^运算:求位异或。

·>>运算:将一个数化成二进制右移

·<<运算:将一个数化成二进制左移

·>>>运算:右移(补零)运算符,即无符号右移,">>>"永远不会产生负号,因为其符号位总是被补零。

注:位运算符更详细讲解,请参考直播视频。

 

六、其他运算符

除上述讲解的运算符外,Java中还提供了其他各类运算符,如赋值运算符、方括号、三元运算符等,下面来一一讲解。

1赋值运算符=

赋值运算符=通常与其他运算符联合使用,具体使用方法如下图所示:

23dbefa036969d8f731ab291170480a45d262c26 

 

2方括号[]

方括号[]是数组运算符,括号中的数值是数组的下标。后续讲解数组方面知识时会详细讲解。

3、三元运算符

三元运算符的模式:<表达式1> <表达式2> : <表达式3>
三元运算符先计算<表达式1>的值,当<表达式1>的值为true时,则将<表达式2>的值作为结果;当<表达式1>的值为false时,则将<表达式3>的值作为结果。

三元运算符示例代码:

Public class OperatorTester05{
public static void main(String[] args){
int c;
c= 1 > 2 ? 1 : 2; //?前表达式为true,取值为:前面值,否则为后面的值
System.out.println(c);
}
}

输出为:2

4、强制类型转换符()

强制类型转换符能将一个表达式的类型强制转换为某一指定数据类型

示例代码:

Public class OperatorTester06{
public static void main(String[] args){
int a;
double b = 5.66600;
a = (int) b;
System.out.println(a);

输出为:5

5、对象运算符instanceof

对象运算符instanceof用来测试一个指定对象是否是指定类(或它的子类)的实例,若是则返回true,否则返回false

示例代码:

Public class OperatorTester07{
public static void main(String[] args){
String s = new String("str");
if(s instanceof Object){
System.out.println("s is object ");
}
}
}

输出为:String is object class

7点运算符

点运算符"."的功能有两个:一是引用类中成员二是指示包的层次等级。例如:System.out()import java.util.Date

 

七、案例:利息计算器

下面是商用车系统的案例中的利息计算器。

080c9c249feffa0bf1d98a62fa71cdda2497b33c 

网页接:http://foton.kelasoft.com/home/computer

在本节课中,我们利用之前所学的知识,实现一次性还本付息计算器的代码,具体如下:

import java.util.Scanner;
import java.util.Scanner;
public class InterestComputor{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的贷款金额");
Double amount = scanner.nextDouble();
System.out.println("请输入你的贷款年利率");
Double rate = scanner.nextDouble();
System.out.println("请输入你的贷款月数");
int months = scanner.nextInt();
//amount*(rate/100.0)*(months/12.0)利息计算公式
Double rateIncome =amount*(rate/100.0)*(months/12.0);
Double totalIncome = amount + rateIncome;
System.out.println("贷款 金额"+amount);
System.out.println("贷款 月数"+months);
System.out.println("贷款年利率"+rate );
System.out.println("需偿还利息"+rateIncome );
System.out.println("本息 合计"+totalIncome );
}
}

程序运行结果

6191e813c52f754499c6d78cf100e4fa7ef34961 

代码重构,将计算过程重构成一个函数:

// 一次性还本付息

import java.util.Scanner;
public class InterestComputor{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的贷款金额");
Double amount = scanner.nextDouble();
System.out.println("请输入你的贷款年利率");
Double rate = scanner.nextDouble();
System.out.println("请输入你的贷款月数");
int months = scanner.nextInt();
compute(amount,rate,months);
}
public static void compute(double amount, double rate, int months){
//amount*(rate/100.0)*(months/12.0)利息计算公式
Double rateIncome =amount*(rate/100.0)*(months/12.0);
Double totalIncome = amount + rateIncome;
System.out.println("贷款 金额"+amount);
System.out.println("贷款 月数"+months );
System.out.println("贷款年利率"+rate );
System.out.println("需偿还利息"+rateIncome );
System.out.println("本息 合计"+totalIncome );
}
}


上一讲回顾:上一讲主要讲解了Java中变量、API文档、输入输出和运算符四方面基础知识。

云栖社区专家系列课——Java必修课系列其他课程:

·Java必修课第一讲:https://yq.aliyun.com/articles/604581

·Java必修课第二讲:https://yq.aliyun.com/articles/604584

·Java必修课第三讲:https://yq.aliyun.com/articles/603660


相关文章
|
4月前
|
设计模式 运维 并行计算
GitHub上的677页Java性能优化笔记火了!竟是阿里调优专家肝出的
Java是目前应用最为广泛的软件开发平台之一。随着Java及Java社区的不断壮大,Java早已不再是一门简单的计算机语言了,它更是一个平台、一种文化、一个社区。
|
Java
《阿里特邀专家关键:Java无锁集合代码分析》电子版地址
阿里特邀专家关键:Java无锁集合代码分析
63 0
《阿里特邀专家关键:Java无锁集合代码分析》电子版地址
|
Java Docker 容器
《阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库》电子版地址
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库
207 0
《阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库》电子版地址
|
Java Spring
《云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧》电子版地址
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧
98 0
《云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧》电子版地址
|
人工智能 架构师 前端开发
清华大牛带领20位大厂专家耗时三年整理出这份2000页Java进阶指南
自我介绍: 马士兵教育: 由马士兵老师携手BATJ名师为大家提供java架构师培训,人工智能培训,大数据培训,软件测试培训,Web前端培训,区块链培训等课程,课程均由一线互联网公司技术大牛精心研发,全程项目式教学!
|
机器学习/深度学习 分布式计算 Cloud Native
Java 程序员可以学习的技术方向,精通任何一个都可以成为专家
Hello 大家好,相信大家跟阿粉一样,在成为卓越的Java 程序员的路上从未停止过学习,作为一个 Java 程序员还有很多我们需要学习的东西,特别是在这样一个技术快速发展的时期可能昨天还在流行的技术,转眼就已经落后了。那么在 2021 年已经接近尾声的时候有哪些技术我们可以继续不断的学习呢?
Java 程序员可以学习的技术方向,精通任何一个都可以成为专家
|
Java
华为技术专家深度解析Java线程状态(下)
华为技术专家深度解析Java线程状态
91 0
华为技术专家深度解析Java线程状态(下)
|
Java 调度
华为技术专家深度解析Java线程状态(上)
华为技术专家深度解析Java线程状态
94 0
华为技术专家深度解析Java线程状态(上)
|
NoSQL 安全 网络协议
阿里华为技术专家教你如何实现一个Java连接池?(下)
阿里华为技术专家教你如何实现一个Java连接池?
82 0
阿里华为技术专家教你如何实现一个Java连接池?(下)
|
安全 网络协议 NoSQL
阿里华为技术专家教你如何实现一个Java连接池?(上)
阿里华为技术专家教你如何实现一个Java连接池?
218 0
阿里华为技术专家教你如何实现一个Java连接池?(上)