开发者社区> 笑傲江湖lcx> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

云栖社区专家系列课——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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
劲爆,Java 协程要来了。。。
我们都知道,Java 目前最小的系统调度单元只支持线程,官方是不支持协程的,但可以通过第三方框架实现,估计也很少有人会用吧,多线程就能满足需求。
98 0
Java资源大全中文版
目录 Java资源大全中文版 古董级工具 构建工具 字节码操作 集群管理 代码分析 编译器生成工具 外部配置工具 约束满足问题求解程序 持续集成 CSV解析 数据结构 数据库 时间日期工具库 依赖注入 开发流程增强工具 分布式应用 分布式数据库 ...
3342 0
java支付宝开发-00-资源帖
一、一些重要的官方文档 1、沙箱登录 2、沙箱环境使用说明 3、如何使用沙箱环境 4、当面付产品介绍 5、扫码支付接入指引 6、当面付快速接入 7、当面付接入必读 8、当面付进阶功能 9、当面付异步通知 10、当面付SDK&DEMO 11、服务端SDK 12、生成RSA密钥 13、线上创建应用说明 14.
935 0
Java正则系列: (2)量词
翻译说明 greedy: 贪婪型, 最大匹配方式; reluctant: 懒惰型, 最小匹配方式; possessive: 独占型, 全部匹配方式; 也翻译为[支配型]; 这3种量词, 是修饰量词的量词, 可以理解为正则格式重复的匹配类型。
1062 0
Java堆内存
  Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。   在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。
832 0
(2)java堆内存
java堆内存结构图 【名词解释】--->eden,so,s1通称为新生代对象储区--->tenured称为老年代对象存储区--->s0和s1也称为from和to区域,是两块大小相等,可以互换角色的内存空间。
823 0
37
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载