栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础语法(2)类型转换与运算符(片尾附笔记与思维导图)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础语法(2)类型转换与运算符(片尾附笔记与思维导图)

类型转换 自动类型转换
  • 范围小的变量,可以直接赋值给类型范围大的变量

// 将char 类型 转换为 int 类型 
char ch = 'a'; // a 在字符表中 代表的数字为 97
int code = ch;   
System.out.println(code);  // 输出结果为97

表达式的自动类型提升
  • 在表达式中,小范围类型的变量会自动转换成当前较大的范围的类型在运算.

byte,short,char --> int  --> long  --> float --> double 

注意事项:

  • 表达式的最终结果类型由表达式中的最高类型决定

例如:

byte a = 10;
int b = 20;
double c = 1.0;
double rs = a+b+c;   // 因为c为double类型, 所以必须定义double变量来接收结果
int i = a+b+c;   // 这种是错误写法
System.out.println(rs);
​
double rs2 = a +b - 2.3;   // 因为出现了小数,所以需要用double来接收结果
System.out.println(rs2);
  • 在表达式中,byte,short,char 是直接转换成int类型参与运算的

例如:

byte i = 10;
byte j = 20;
int k = i+j; // 因为两个byte加起来容易越界,所以需要使用int来接收参数
System.out.println(k);
  • 如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型

  • 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型

  • 否则.如果其中一个操作数是long类型,另一个操作数将会转换为long类型

  • 否则,两个操作数都将转换为int类型

强制类型转换
  • 类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,会报错

强制类型转换

  • 可以强行将类型范围大的变量,数据赋值给类型范围小的变量

数据类型 变量2 = (数据类型)变量1
 int a = 20;
 byte b =(byte)a; // 将int 类型强转为byte类型

double score = 99.9;
int i = ( int )score;  // 会省略小数
System.out.println(i); // 打印的内容为:99

运算符
  • 运算符:对字面量或者变量进行操作的符号

算数运算符
符号作用说明
+加加法
-减减法
*乘乘法
/除除法 注意: 在Java中两个整数相除的结果还是整数
%取余获取两个数据做除法的余数

int a = 10;
int b = 3;
System.out.println(a + b); // 13
System.out.println(a - b); // 7
System.out.println(a * b); // 30
System.out.println(a / b); // 3 因为是两个int 类型的除法,所以最后结果为3
System.out.println(a % b); // 1

如果非得要得到小数该怎么办呢?

  • 强制类型转换

int a = 10;
int b = 3;
System.out.println((double) a / b); // 3.3333333333333335
  • 通过强制类型转换,将其结果转换为double类型,最后结果也就是小数类型了

练习:
  • 输入一个数,分别拿出他的个位十位和百位.输出结果如下:

int i = 123;
System.out.println(i+"个位数为:" + i % 10);
System.out.println(i+"十位数为:" + i /10 % 10);
System.out.println(i+"白位数为:" + i /100);
“+”做连接符
  • “+” 符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串

  • 能算则算 , 不能算就在一起

int a = 5;
System.out.println("abc"+'a');  // abca
System.out.println("abc"+a);  // abc5
System.out.println(5 + a);   // 10
System.out.println("abc"+5+'a');  // abc5a
System.out.println(15+"abc"+15);  // 15abc15
System.out.println(a+'a');    // 102  字符a在字符表中是97,所以计算结果为102
System.out.println(a+ "" + 'a');  // 5a  因为中间有字符串,所以结果为字符串
System.out.println(a + 'a' + "abc"); // 102abc 
System.out.println("abc"+ a + 'a'); // abc5a
System.out.println("abc"+(a + 'a')); // abc102
自增自减运算符
符号作用说明
++自增变量自身加1
--自减变量自身减1

注意:

  • ++ 和 -- 既可以放在变量的后边,也可以放在变量的前边

  • ++ ,--只能操作变量,不能操作字面量

int a = 10;
a++; // 等同于 a = a+1;
System.out.println(a); // 11
​
int b = 10;
b--; // b = b-1
System.out.println(b); // 9

注意输出结果:

int i = 10;
int j = ++i; // 先将i+1,在将值赋值给j
System.out.println(i); // 11
System.out.println(j); // 11
​
int m = 10;
int n = m++; // 先将m的值赋值给n ,在将m+1
System.out.println(m); // 11
System.out.println(n); // 10
赋值运算符

基本赋值运算符

  • 就是 “ = ”

int a = 10;  // 先看 " = "右边,把数据10赋值给左边变量a存储

扩展赋值运算符

符号作用说明
+=加后赋值a+=b 等价于 a = (a的数据类型)(a+b); 将a + b的值给a
-=减后赋值a-=b 等价于 a = (a的数据类型)(a-b); 将a - b的值给a
*=乘后赋值a*=b 等价于 a = (a的数据类型)(a*b); 将a * b的值给a
/=除后赋值a/=b 等价于 a = (a的数据类型)(a/b); 将a / b的值给a
%=取余后赋值a%=b 等价于 a = (a的数据类型)(a%b); 将a % b的值给a
  • 注意: 扩展的赋值运算符隐含了强制类型转换

关系运算符
  • 对数据进行条件判断的符号,最终会返回一个比较的布尔结果(false , true)

符号说明
==a==b, 判断a和b的值是否相等,成立为true ,不成立为false
!=a!=b, 判断a和b的值是否不相等,成立为true ,不成立为false
>a>b, 判断a是否大于b,成立为true ,不成立为false
>=a>=b, 判断a是否大于等于b,成立为true ,不成立为false
<a
<=a<=b, 判断a是否小于等于b,成立为true ,不成立为false
  • 注意:在做相等判断时,千万不能把 == 误写成 =

= 表示赋值

== 表示判断是否相等
逻辑运算符
  • 可以把多个条件的布尔结果放在一起运算,最终返回一个布尔结果

符号介绍说明
&逻辑与必须都是true,结果才是true;只要有一个是false ,结果一定是false
|逻辑或只要有一个为true,结果就为true
!逻辑非你真我假,你假我真, !true = false , !false = true
^逻辑异或如果两个条件都是false 或者都是true 则结果都是false,两个条件不同结果是true

double size = 9.8;
double s = 16;
​
// 逻辑与
// 需求:尺寸大于6.95,内存大于8gb
System.out.println(s >= 6.95 & size >= 8);   // true
​
// 逻辑或
// 需求:要么内存大于32,要么尺寸大于6.95
System.out.println(s >= 6.95 | size >= 32);  // true
​
// 逻辑非
System.out.println(!true);   // false
System.out.println(!false);   // true
​
// 逻辑异或
System.out.println(false ^ true);   // true
System.out.println(false ^ false);  // false
短路逻辑运算符
符号介绍说明
&&短路与判断结果与 “ & ”一样 ,过程是左边是false ,右边则不执行
||短路或判断结果与 “ | ”一样,过程是左边为true,右边则不执行
  • 注意: 逻辑与 “ & ” , 逻辑或 “ | ” : 无论左边是false 还是 true ,右边都要执行

// && & || |  区别
int a = 10;
int b = 20;
System.out.println(a > 100 && ++b > 10); // false
System.out.println(b);   //  结果还是20,因为左边判断为false,右边则不执行
System.out.println(a > 100 & ++b > 10);  // false
System.out.println(b);   // 结果为21, 因为 & 两边都要执行
​
​
int i = 10;
int j = 20;
System.out.println(i > 2 || ++j>10);  // true
System.out.println(j); // 20  因为左边判断为true 右边则不判断
System.out.println(i > 2 | ++j>10);  // true
System.out.println(j);  // 21 因为 | 两边都要执行
三元运算符
  • 格式:条件表达式 ? 值1 : 值2

  • 执行流程:首先计算关系表达式的值,如果值为true ,返回值1,如果为false,返回值2

double score = 90;  
String s = score >= 60 ? "考试通过" : "挂了"; // 先计算 '?' 左边是否大于60, 如果大于60 返回 "考试通过", 如果小于返回 "挂了"
System.out.println(s);   // 考试通过

如何用三元运算符计算两个整数中的最大值呢?

int a = 200;
int b = 300;
int max =  a > b ? a : b;   // 因为a 小于 b 结果为false,所以结果为b
System.out.println(max);   // 300

那么如何用三元运算符计算三个整数中的最大值呢?

int num1 = 1090;
int num2 = 450;
int num3 = 30;
int temp = num1 > num2 ? num1 : num2;  // 先判断num1和num2哪个大,将大值赋值给变量temp
int max = num3 > temp ? num3 : temp;  // 之后再用num3与temp进行比较,最后得出最大值
System.out.println(max);
  • 了解:用一行语句的三元运算符计算三个整数的最大值(三元运算符的嵌套)

int num1 = 1090;
int num2 = 450;
int num3 = 30;
​
int max1 = num1 > num2 ? num1 > num3 ? num1 : num3 : num2 > num3 ? num2 : num3;
​
​
// 上面是不是不是很好理解,如果这样写呢?
 int max1 = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3);
​
// 先判断num1 是否大于 num2 如果num1大于num2 则走 第一个分支 , 如果num1小于num2 则走第二个分支,
// 然后第一个分支在比较num1,是否大于num3,大于则走第一个,小于则走第二个,第二个分支同理
运算符优先级
  • 在表达式中,哪个运算符先执行后执行是要看优先级的, 例如 “ *,/ ” 的优先级高于 “ +,- ”

优先级运算符
1( )
2! , - , ++ , --
3* , / , %
4+ , -
5<< , >> , >>>
6< , <= , > , >= , instanceof(关键字)
7== , !=
8&
9^
10|
11&&
12||
13?
14= , += , -= , *= , /= , %= , &=
键盘录入
import java.util.Scanner;  // 导入Scanner坐标
​
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);  // 获取Scanner对象
        
        System.out.println("请输入您的年龄:");
        int age = in.nextInt();   // 通过对象调用他的方法,实现键盘录入,等待用户输入数据
        System.out.println("您的年龄为:" + age);  // 打印输出结果
        System.out.println("请输入您的名称:");
        String name = in.next();   // next()方法为 用户输入一串字符串,截取到空格之前
        System.out.println("欢迎:" + name);  // 打印结果
    }
}

上面代码的运行结果为:

如果输入名称有空格:

如果想要读取一整行字符串,则可以用 in.nextLine();

String name = in.nextLine();

如果想要读取一个浮点数,则可以用in.nextDouble();

double d = in.nextDouble();
总结

1.为什么要进行类型转换?

  • 存在不同类型的变量赋值给其他类型的变量

2.自动类型转换是什么样的?

  • 类型范围小的变量,可以直接赋值给类型范围大的变量

3.表达式的自动类型转换是什么样的?

  • 小范围的类型会自动转换成大范围的类型运算

4.表达式的最终结果类型是由谁决定的?

  • 最终类型由表达式中的最高类型决定

5.表达式的有哪些类型转换是需要注意的?

  • byte short char 是直接转换成int 类型参与运算的

6.算数运算符有哪些?

+   -   *   /   %

7./ 需要注意什么?为什么?

  • 如果两个整数做除法,其结果一定是整数,因为最高类型是整数

8.什么是强制类型转换?

  • 可以强行将类型范围大 的变量,数据赋值给类型范围小的变量

  • 数据类型 变量 = (数据类型)变量

9.强制类型转换有哪些需要注意的?

  • 可能出现数据丢失

  • 小数强制转换成整数是直接截断小数保留整数

10.+除了做基本数学运算,还有哪些功能?

  • 与字符串做+运算时会被当成连接符,其结果还是字符串

  • 能算则算,不能算就在一起

11.自增,自减运算符是什么,有什么作用?

  • ++,-- 对当前变量值+1,-1

12.自增,自减运算符在变量前后有区别吗?

  • 如果单独使用放在前后没有区别

  • 非单独使用:在变量前,先进行变量自增/自减,在使用变量

  • 非单独使用:在变量后,先使用变量,在进行变量自增/自减

13.赋值运算符有哪些?

  • = , += , -= , *= , /= , %=

14.作用是什么?

  • 基本作用是赋值

  • += 可以实现数据累加,把别人的数据加给自己

15.逻辑运算符有哪些,有什么特点?

  • 逻辑与 “ & ” : 有一个为false,结果是false

  • 短路与 “ && ”: 一个为false , 结果为false ,前一个为false,后一个条件不执行

  • 逻辑或 “ | ” : 有一个为 true,结果为true

  • 短路或 “ || ” : 一个为true,结果是true,前一个为true,后一个条件不执行

  • 逻辑非 “ ! ”: !false = true , !true = false

  • 逻辑异或 “ ^ ” : 相同为false,不同为true

  • 注意:常用的逻辑运算符还是: && , || , !

思维导图

 笔记文件:

链接:https://pan.baidu.com/s/1uonB6zg0T1Iwetwt3mCGKg?pwd=cyzz
提取码:cyzz

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017537.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号