java运算符介绍(java中的运算符的概念)
java运算符介绍(java中的运算符的概念)举例说明:不同运算符连接的表达式体现的是不同类型的表达式。对常量或者变量进行操作的符号1.2.2 表达式用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
1、算数运算符
1.1 问题
1什么叫做运算符
2什么叫做表达式
3算术运算符有哪些
1.2 答案
1.2.1 运算符的概念
对常量或者变量进行操作的符号
1.2.2 表达式
用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
不同运算符连接的表达式体现的是不同类型的表达式。
举例说明:
inta=10;
intb=20;
intc=a b;
:是运算符,并且是算术运算符。
a b:是表达式,由于 是算术运算符,所以这个表达式叫算术表达式。
1.2.3 算术运算符的分类
注意:
- /和%的区别:两个数据做除法,/取结果的商,%取结果的余数。
- 整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
publicclassDemo1Operator{
publicstaticvoidmain(String[]args) {
System.out.println(5/2);
System.out.println(5/2.0);
System.out.println(5.0/2);
System.out.println(5.0/2.0);
System.out.println("---------------------");
System.out.println(5%2);
System.out.println(4%2);
}
}
2、字符的 操作
2.1 问题
1字符的 操作运算过程
2什么是ASCII码表
3为什么要有这样的码表
2.2 答案
2.2.1 字符的 操作运算过程
当(byte short char int)在一起运算的时候,都会提升为int之后,再进行运算;char提升为int的过程,就是查找码表中,字符所对应的数值表示形式
2.2.2 ASCII码表
ASCII (American Standard Code for Information Interchange):美国信息交换标准代码,是计算机中字节到字符的一套对应关系。通俗讲就是每个字符都有一个对应的数字
常见的char类型数据代表的int值
'a'----97 'A'----65 '0'----48
举例:
inta='A' 1;
//1.根据'A'查找码表找到对应的数值 65
//2.需要提升为int类型
//3.进行算数运算 得到结果66 int类型
//4.将结果赋值给变量a
举例:大写转小写
charc='A';
charc1=(char)(c 32);
2.2.3 为什么要有这样的码表
计算机中数据的存储,都是以字节的形式在进行存储,我们不会直接操作繁琐的、不便于记忆的字节
2.3 补充
进制相关
在计算机内部所有的数据都使用二进制表示 每一个二进制位(bit)有0和1两种
因此8个二进制位就可以组合出256种状态 ,这被称为一个字节(byte)
一个字节一共可以用来表示256种不同的状态。每一种状态都有一个符号,就是256个符号。
从00000000到11111111
ASCII码:上世纪60年代美国制定了一套字符编码。对英语字符与二进制位之间的关系,做了统一的规定。这被称为ASCII码 ASCII码一共规定了128个字符的编码 比如空"space"是32(二进制是00100000)大写字母A是65(二进制01000001).这128个符号。包括32个不能打印出来的控制符号。只占用一个字节后面的7位。
最前面的一位统一规定为0。
缺点:
1不能表示所有字符
2相同的编码表示的字符不一样 假设120在法语编码表中代表(你)可能在希伯语编码中代表另一个意思所以各个国家都有了自己的字符集比如中国的就是GBKGB2312中国台湾的big5(繁体编码)
乱码:世界上存在着多种编码方式。从一个二进制数字可以被解释成不同的符号,
因此想要打开一个文本文件就必须知道它的编码方式,否则用错误的编码方式解读就会出现乱码.
Unicode:一种编码将世界上所有的符号都纳入其中。每一个符号都赋予一个独一无二的编码,
使用Unicode没有乱码的问题 所以也叫万国码
Unicode缺点:Unicode只规定了符号的二进制代码。却没有规定这个二进制代码应该是如何存储的,无法区别Unicode和ASCII:计算机无法区分三个字节表示一个符号,还是分别表示三个符号。另外我们知道英文字母只用一个字节表示就够了 如果Unicode统一规定 。每一个符号用三个或4个字节表示.那么每个英文字母前都必然有2~3个字节是0,这是对存储空间来说是极大的浪费。
Unicode方向是比较大的。真正落地的实现是下面这种方式
UTF-8:是在互联网上使用最广泛的一种Unicode的实现方式。
UTF-8是一种变长的编码方式。它可以使用1~6个字节来表示一个符号。根据不同的符号而变化字节长度。
后边的学习乃至工作开发中都是会用这个编码方式
3、字符串的 操作
3.1 问题
1字符串是什么数据类型
2字符串的表现形式
3字符串的 操作是什么意思
3.2 答案
3.2.1 字符串
字符串是引用数据类型;用一对双引号包裹起来的
3.2.2 字符串的 操作
当“ ”操作中出现字符串时,这个” ”是字符串连接符,而不是算术运算
publicclassTest{
publicstaticvoidmain(String[]args) {
System.out.println(1 23);
System.out.println("年龄为:" 23);
System.out.println(1 99 "年黑马");
}
}
3.3 练习
charc='a';
intnum=10;
Strings="hello";
System.out.println(c num s);
System.out.println(c s num);
System.out.println(c (num s));
System.out.println(s num c);
System.out.println(s (num c));
4、案例:数值拆分
4.1 拆分规则
个位 :数值 % 10
十位 :数值 / 10 % 10
百位 :数值 / 10 / 10 % 10
千位 :数值 / 10 / 10 / 10 % 10;
4.2 练习
键盘录入一个四位数,获取该数字各个位置上的数据值并打印
5、自增自减运算符
5.1 问题
1自增自减的符号
2参与操作,在前和在后的区别
5.2 答案
5.2.1 符号
和-- 既可以放在变量的后边,也可以放在变量的前边。单独使用的时候, 和-- 无论是放在变量的前边还是后边,结果是一样的。
5.2.2 参与操作
如果放在变量的后边,先将该变量原本的值,取出来参与操作,随后再进行自增( ),自减(--)
如果放在变量的前边,先对该变量做自增( )或者自减(--),然后再拿变量参与操作
5.3 练习
需求:看程序 不提前运行 说结果
代码1:
inta=1;//这三个a是同一个 存储空间是一样的 其中一个改变其他的使用时候都变了
intb=a a ;
分析:
intb=(1) (2);//表达式
a值变化:1--2--3
a值?b值?
代码2:
inta=1;
intb= a a ;
intb=(2) (2);//表达式
a值变化:123
a值?b值?
代码3:
inta=1;
intb= a a;
intb=(2) (3);
a值变化:123
a值?b值?
注意点:
shorts1=10;
s1 ;//自增1不会改变自身的变量的数据类型
5.4 注意事项
使用自增/自减运算时应注意下面几个问题。
自增/自减只能作用于变量,不允许对常量、表达式或其他类型的变量进行操作。常见的错误是试图将自增或自减运算符用于非简单变量表达式中。
自增/自减运算可以用于整数类型byte、short、int、long,浮点类型Float、double,以及字符串类型char。
在Java1.5以上版本中,自增/自减运算可以用于基本类型对应的包装器类Byte、Short、Integer、Long、Float、Double和Character。注:就业班会讲包装类
6、赋值运算符
6.1 问题
1、赋值运算符的作用
2、基本赋值运算符有哪些?
3、扩展赋值运算符有哪些
6.2 答案
6.2.1 作用
赋值运算符的作用是将一个表达式的值赋给左边,左边必须是可修改的,不能是常量。
6.2.2 基本赋值运算符
符号:=
作用:赋值
说明:将等号右边的数据值赋值给等号左边的变量(a = 10; 将10赋值给a变量)
6.2.3 扩展赋值运算符
注意事项:
扩展的赋值运算符隐含了强制类型转换。
shorts=10;
s=s 10;// 此行代码报出,因为运算中s提升为int类型,运算结果int赋值给short可能损失精度
s =10;// 此行代码没有问题,隐含了强制类型转换,相当于 s = (short) (s 10);
7、关系运算符(比较运算符)
7.1 问题
1关系运算符分类
2关系运算符的结果是什么
3=和==的区别
7.2 答案
7.2.1 分类
关系运算符有6种关系,分别为小于、小于等于、大于、等于、大于等于、不等于
7.2.2 结果
关系运算符的结果都是boolean类型,要么是true,要么是false。
7.2.3 =和==的区别
千万不要把“==”误写成“=”,"=="是判断是否相等的关系,"="是赋值。
=赋值运算符
==比较运算符
比较基本数据类型,比较的是数据值本身
比较引用数据类型,比较的是地址值(后续学习)
7.3 代码示例
inta=10;
intb=20;
System.out.println(a==b);// false
System.out.println(a!=b);// true
System.out.println(a>b);// false
System.out.println(a>=b);// false
System.out.println(a<b);// true
System.out.println(a<=b);// true
// 关系运算的结果肯定是boolean类型,所以也可以将运算结果赋值给boolean类型的变量
booleanflag=a>b;
System.out.println(flag);// 输出false
8、逻辑运算符
8.1 问题
1、逻辑运算符的概念
2、逻辑运算符的分类
3、逻辑运算符的作用
8.2 答案
8.2.1 概念
- 理解层面:逻辑运算符,可以用来整合多个条件,为一段整体的逻辑
- 代码层面:连接布尔类型的表达式, 或者是值
8.2.2 分类
8.2.3 作用
用于(整合)多个比较表达式的条件,最终得到的结果是boolean类型的true或false。
其实就是用来连接关系表达式的运算符(也可以直接连接布尔类型的常量或者变量)
9、短路逻辑运算符
9.1 问题
1、分类
2、作用
9.2 答案
9.2.1 分类
9.2.2 作用
在逻辑与运算中,只要有一个表达式的值为false,那么结果就可以判定为false了,没有必要将所有表达式的值都计算出来,短路与操作就有这样的效果,可以提高效率。同理在逻辑或运算中,一旦发现值为true,右边的表达式将不再参与运算
计算规则:
- 逻辑与&,无论左边真假,右边都要执行。
- 短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。
- 逻辑或|,无论左边真假,右边都要执行。
- 短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。
9.3 代码示例
intx=3;
inty=4;
System.out.println((x >4)&(y >5));// 两个表达都会运算
System.out.println(x);// 4
System.out.println(y);// 5
System.out.println((x >4)&&(y >5));// 左边已经可以确定结果为false,右边不参与运算
System.out.println(x);// 4
System.out.println(y);// 4
备注:开发中推荐使用短路运算符
10、三元运算符
10.1 问题
1、格式
2、执行流程
10.2 答案
10.2.1 格式
关系表达式 ? 表达式1 : 表达式2;
10.2.2 执行流程
问号前面的位置是判断的条件,判断结果为boolean型。
为true时调用表达式1,为false时调用表达式2。
其逻辑为:如果条件表达式成立或者满足则执行表达式1,否则执行第二个。
10.3 示例代码
inta=10;
intb=20;
intc=a>b?a:b;// 判断 a>b 是否为真,如果为真取a的值,如果为假,取b的值
10.4 注意事项
1.表达式1和2要有明确的计算结果 不能写输出语句
intmax=num1>num2?System.out.println(num1) :System.out.println(num);
//大错特错
2.三元运算符的运算结果不能直接摆在那里 要么定义变量接收 要么直接打印输出
num1>num2?num1:num2;//错误的
intnum=num1>num2?num1:num2;
可以直接打印(单纯展示数据)
System.out.println(num1>num2?num1:num2);
3.表达式1和2结果要有一个统一的类型
doubled=10>5?2:1.0;提升,隐式转换
???=10>5?"2":1.0;
4.三元运算符可以嵌套使用:
inta=10 b=20;
Stringresult=a>b?"a大":"b大";
如果a和b相等嵌套一下
Stringresult=a>b?"a大":(a==b?"相等":"b大");
11、案例:三个和尚
求三个数的最大值
importjava.util.Scanner;
publicclassTest2Operator{
publicstaticvoidmain(String[]args) {
//1.使用Scanner键盘录入三个整数
Scannersc=newScanner(System.in);
System.out.println("请输入三个整数:");
intnum1=sc.nextInt();
intnum2=sc.nextInt();
intnum3=sc.nextInt();
//2:用三元运算符获取前两个整数的最大值,并用临时变量保存起来。
inttemp=num1>num2?num1:num2;
//3:用三元运算符,让获取临时最大值和第三个数比较,得到结果。
intmax=temp>num3?temp:num3;
//4:输出结果
System.out.println("最大值是:" max);
}
}
思考:
如果我要求三个数的最小值呢?
只要把里面的大于号变成小于号就可以了
12、运算符的优先级
在Java中,运算符优先级如下图所示:
有没有觉得很麻烦,很头疼?所以,这些优先级我们不需要记忆。
只要知道一点即可:小括号优先于所有!
在计算的时候必定是先计算小括号里面的,再计算小括号外面的。
代码示例:
inta=10;
intb=20;
System.out.println(a>b||a<b&&a>b);//代码阅读性很差
-----------改写如下--------------
inta=10;
intb=20;
System.out.println((a>b)||(a<b&&a>b));//代码阅读性很好