1-3 运算符
运算符: 对字面量或者变量进行操作的符号
表达式: 用运算符把字面量或者变量连接起来符合 java 语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。
1.1、算术运算符
Java 中的算术运算符有如下几种:
实例:
/*
算术运算符
*/
public class OperatorDemo {
public static void main(String[] args) {
//定义两个int类型的变量
int a = 6;
int b = 4;
//10
System.out.println(a + b);
//2
System.out.println(a - b);
//24
System.out.println(a * b);
//结果为 1 还是 1.5? ,结果为 1
System.out.println(a / b);
//2
System.out.println(a % b);
//整数相除只能得到整数,要想得到小数,必须有浮点数的参与
System.out.println(6.0 / 4);
}
}
最后,我们来总结一下,刚才在演示代码的时候有两个注意事项:
1.2、案例数值拆分
需求: 定义一个三位数,将其拆分为个位、十位、百位后,输出在控制台
什么意思呢?下面我们举例来说明一下:
举例: int number = 123;
在控制台输出结果:
个位是:3
十位是:2
百位是:1
知道了要做什么后,下面我们来分析一下如何获取个位,十位,百位:
分析:
-
个位的计算:数值 % 10
123 除以 10(商12,余数为3)
-
十位的计算:数值 / 10 % 10
123 除以 10 (商12,余数为3,整数相除只能得到整数)
12 除以 10 (商1,余数为2)
-
百位的计算:数值 / 10 / 10 % 10
123 / 10 / 10 % 10(123 / 10 得到12,12 / 10 得到1,1 % 10 得到 1)
分析完毕之后,实现一下:
/*
需求:定义一个三位数,将其拆分为个位、十位、百位后,输出在控制台
*/
public class OperatorTest {
public static void main(String[] args) {
//定义一个三位数
int number = 123;
//获取个,十,百位数据
int ge = number % 10;
int shi = number / 10 % 10;
int bai = number / 100 % 10;
//输出结果
System.out.println("个位是:" + ge);
System.out.println("十位是:" + shi);
System.out.println("百位是:" + bai);
}
}
1.3、+操作的三种情况
1.3.1、数字相加(类型转换)
在Java程序中,数据参与运算,要求类型一致。这里就涉及到了数据的类型转换。而类型转换又分为两种:
- 隐式转换
- 强制转换
隐式转换: 把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量
强制转换: 把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量
格式:数据类型 变量名 = (目标数据类型)(数值或者变量)
演示如下:
/*
数字相加
*/
public class OperatorDemo01 {
public static void main(String[] args) {
int a = 10;
double b = 13.14;
//隐式转换 为 double
System.out.println(a + b);
//强转为 int
int c = (int)(a + b);
System.out.println(c);
//double d = a + b;
short s = 10;
int i = 20;
//隐式转换 为 int
int j = s + i;
//short ss = s + i;
//强转为 short
short ss = (short) (s + i);
}
}
强转溢出问题案例:
public static void main(String[] args) {
//short 最大为 32767
int a = 32769;
int b = 32768;
int c = 32767;
short d = (short)a;
short e = (short)b;
short f = (short)c;
System.out.println(d);//-32767
System.out.println(e);//-32768
System.out.println(f);//32767
}
当做强转的时候,会出现数据值溢出的情况,
如果数据超过了最大值,则会变成最小值,所以在转换之前要考虑是否会溢出这点
1.3.2、字符相加
代码演示:
/*
字符相加
*/
public class OperatorDemo02 {
public static void main(String[] args) {
//定义两个变量
int i = 10;
char ch = 'A';//'A'的值是65
ch = 'a';//'a'的值是97
ch = '0';//'0'的值是48
System.out.println(i + ch);
}
}
字符参与 + 操作,其实就是拿字符在计算机底层对应的数值来进行计算的,这里我们了解一下英文大小写字符和数字字符对应的数据值:
- ‘A’ 65 A-Z 是连续的
- ‘a’ 97 a-z 是连续的
- ‘0’ 48 0-9 是连续的
ASCII 码表,里面有常用的字符及其对应的数值关系:
1.3.3、字符串相加
代码演示:
/*
字符串相加
*/
public class OperatorDemo03 {
public static void main(String[] args) {
System.out.println("it" + "heima");
System.out.println("itheima" + 666);
System.out.println(666 + "itheima");
System.out.println("itheima" + 6 + 66);
System.out.println(1 + 99 + "年itheima");
}
}
代码演示完毕后,回到资料总结:
- 当 “+” 操作中出现字符串时,这个 “+” 是字符串连接符,而不是算术运算
- “zhongguo”+ 666
- 当连续进行 “+” 操作时,从左到右逐个执行
- 1 + 9999 + “岁zhongguo”
1.4、赋值运算符
Java 中的赋值运算符有如下几种:
代码演示:
/*
赋值运算符
*/
public class OperatorDemo {
public static void main(String[] args) {
int a = 10;
System.out.println("a:" + a);
// += : 把左边和右边的数据相加,最后把结果赋值给左边
//a += 20;
a = a + 20;
System.out.println("a:" + a);
//注意:扩展的赋值运算符底层隐含了强制类型转换
short s = 1;
//s += 2;
s = (short) (s + 2);
System.out.println("s:" + s);
}
}
注意:
以上内容大部分来着黑马,然后进行了下加工