【Java基础】02 类型转换、常用运算符
关于Java语言基础知识同学们需要学会什么?
类型转换知识:如何实现程序中不同类型的变量或者数据互相传输,不同类型的数据运算的结果数据的类型如何确定?
运算符的使用:程序中怎么进行数据的基本算术运算、以及一些逻辑运算、Java提供了具体哪些运算方式
怎么调用Java提供的程序:程序中怎么进行数据的基本算术运算、以及一些逻辑运算、Java提供了具体哪些运算方式
变量详解
变量里的数据在计算机中的底层逻辑
二进制
二进制:只有0、1,按照逢2进1的方式表示数据
十进制转二进制的算法:除二取余法。
字节和位
计算机中数据最小的组成单元:使用8个二进制位为一组,称之为一个字节(byte,简称B)
字节中的每个二进制位就称为 位(bit,简称b),1B = 8b
数据在计算机底层都是怎么存储的?
都是采用二进制:使用0、1,按照逢2进1的规则表示数据来存储。如何快速的算出一个数据的二进制形式?
除二取余法数据在计算机底层存储的最小单位是什么?
字节,一个字节等于8个二进制位:1B=8b其他数据是如何储存的?
Text文本、Image图片、Sound声音字符在计算机中是如何存储的呢?
ASCII编码表:即美国信息交换标准编码,规定了现代英语、数字字符、和其他西欧字符对应的数字编号。图片数据-彩色图
- 图片就是无数个像素点组成的
- 每个像素点的数据:用
0 ~ 255*255*255
表示其颜色
声音数据:波形图
字符数据在计算机中是怎么存的?
- 字符存的是ascii码表中对应的数字的二进制形式。
- 字符’A’对应的数字是 65
- 字符’a’对应的数字是 97
- 字符’0’对应的数字是 48
十进制与二进制相互转换
- 十进制转二进制:除二取余
- 二进制转十进制:乘权求和
八进制、十六进制介绍
为了便于观察和表示二进制,推出了八进制和十六进制。
每3位二进制作为一个单元,最小数是0,最大数是7,共8个数字,这就是八进制。
97
=>001100001
九十七转为二进制001、100、001
=>141
二进制转为八进制
每4位二进制作为一个单元,最小数是0,最大数是15,共16个数字,依次用: 0~9 A B C D E F 代表就是十进制
97
=>01100001
,0110、0001
=>61
250
=>11111010
,1111、1010=>
FA`
Java程序中支持书写二进制、八进制、十六进制的数据,分别需要以0B或者0b、0、0X或者0x开头。
计算机的数据单位
计算机最小的组成单元是:字节,1B = 8b
在B的基础上,计算机发展出了KB、MB、GB、TB、…. 这些数据单位。
1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
数据类型
数据类型的作用
数据类型就是约束变量存储数据的形式:数据类型 变量名称 = 初始值;
数据类型的分类
- 引用数据类型:除基本数据类型之外的,如String ,其他的后面学习
- 基本数据类型:4大类8种
总结
数据类型分为几种?
- 引用数据类型:String
- 基本数据类型:4大类8种。
- byte short int(默认) long 整型
- float double(默认) 浮点型
- char 字符型(一个字母、数字或汉字)
- boolean 布尔型
随便写的整数、小数字面值默认什么类型?
- 23 ,默认是int类型 , 加上L/l就是long类型的数据了。
- 23.8,默认是double类型,加上F/f就是float类型了。
1 | package study; |
- java中的单引号表示字符,java中的双引号是字符串。
- 单引号引的数据一般是char类型的;双引号引的数据 是String类型的。
- java中单引号里面只能放一个字母或数字或符号;java中的双引号里面是0到多个字符构成。所以字符可以直接转换成字符串。字符串需要使用charAt(n) 来获取第几个字符。
类型转换
自动类型转换
为什么要进行类型转换?
存在不同类型的变量赋值给其他类型的变量自动类型转换是什么样的?
类型范围小的变量,可以直接赋值给类型范围大的变量。自动类型转换底层原理
表达式的自动类型转换
在表达式中,小范围类型的变量会自动转换成当前较大范围的类型再运算。
byte、short、char
=>int
=>long
=>float
=>double
达式的最终结果类型由表达式中的最高类型决定。
在表达式中,byte、short、char 是直接转换成int类型参与运算的。
强制类型转换
类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,会报错。
1
2int a = 20;
byte b = a; // 报错强制类型转换:可以强行将类型范围大的变量、数据赋值给类型范围小的变量。
1
2int a = 20;
byte b = (byte) a;语法是
数据类型 变量 = (数据类型) 变量或数据
强制类型转换底层原理
注意事项:
- 强制类型转换可能造成数据(丢失)溢出;
- 浮点型强转成整型,直接丢掉(截断)小数部分,保留整数返回。
1 | package study; |
运算符
基本算术运算符
1 | package study; |
- Java中两个整数相除结果还是整数,浮点数与整数相除结果是浮点数,取决于最高类型是什么。
案例:数值拆分
- 需求:一个三位数,将其拆分为个位、十位、百位后,打印在控制台
- 使用 Scanner 键盘录入一个三位数
- 个位的计算:数值 % 10
公式总结:
个位 :数值 % 10
十位 :数值 / 10 % 10
百位 :数值 / 10 / 10 % 10
千位 :数值 / 10 / 10 / 10 % 10;
…
1 | package study; |
案例知识:键盘录入技术
1 | // 输入扫描 |
+符号做连接符
“+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。
1 | package study; |
自增自减运算符
++
和--
既可以放在变量的后边,也可以放在变量的前边。++
和--
只能操作变量,不能操作字面量。注意事项:如果不是单独使用(如在表达式中、或者同时有其它操作),放在变量前后会存在明显区别
- 放在变量的前面,先对变量进行+1、-1,再拿变量的值进行运算。
- 放在变量的后面,先拿变量的值进行运算,再对变量的值进行+1、-1
拓展案例(面试笔试题)
1 | int c = 10; |
逐步分析:
1 | package study; |
赋值运算符
- 作用:
- 基本作用是赋值,扩展运算符还自带了强制类型转换。
- +=还可以实现数据的累加,把别人的数据加给自己。
关系运算符
- 注意:在做相等判断是,千万不要把
==
误写成=
逻辑运算符
- 逻辑运算符有哪些,有什么特点?
- 逻辑与
&
:有一个为false、结果是false - 短路与
&&
: 一个为false、结果是false。前一个为false,后一个条件不执行了 - 逻辑或
|
:有一个为true、结果是true - 短路或
||
:一个为true、结果是true。前一个为true,后一个条件不执行了 - 逻辑非
!
:!false=true、 !true=false - 逻辑异或
^
:相同是false、不同是true - 注意:实际开发中、常用的逻辑运算符还是:
&&
、||
、!
- 逻辑与
三元运算符
格式:条件表达式 ? 值1 : 值2;
执行流程:首先计算关系表达式的值,如果值为true
,返回值1
,如果为false
,返回值2
案例:求三个整数最大值
- 需求:定义三个整数,找出最大值并打印在控制台。
- 用三元运算符获取前两个整数的最大值,并用临时变量保存起来。
num1 > num2 ? num1 : num2;
- 用三元运算符,让临时最大值,和第三个整数,进行比较,并记录结果。
temp > num3 ? temp : num3;
- 输出结果
- 用三元运算符获取前两个整数的最大值,并用临时变量保存起来。
1 | package study; |
结合键盘输入:
1 | package study; |
运算符优先级
优先级 | 运算符 |
---|---|
1 | () |
2 | ! 、~ 、++ 、-- |
3 | * 、/ 、% |
4 | + 、- |
5 | << 、>> 、>>> |
6 | < 、<= 、> 、>= 、instanceof |
7 | == 、!= |
8 | & |
9 | ^ |
10 | ` |
11 | && |
12 | ` |
13 | ?: |
14 | = 、+= 、-= 、*= 、/= 、%= 、&= |
参考内容:
键盘录入技术
请完成Java程序与用户交互,比如录入用户输入的名称、年龄,怎么办?
API(Application Programming Interface,应用程序编程接口)
- Java写好的程序(功能代码),咱们可以直接调用。
- Oracle 也为Java写好的程序提供了相应的 API文档(技术使用说明书) 。
键盘录入功能实现的三个步骤:
API是什么?
- Application Programming Interface,应用程序编程接口。
- Java写好的程序,咱们可以直接调用。
键盘录入的开发步骤
- 导包:
import java.util.Scanner;
- 抄写代码得到扫描器对象:
Scanner sc = new Scanner(System.in)
- 抄写代码等待接收用户输入的数据:
sc.nextInt()
、sc.next()
- 导包: