Java基础知识之运算符
本次的知识总结是关于迄今为止乃至以后的Java学习或是开发中需要涉及到的所有运算符来进行一个知识总结,希望能给有缘人一些用处,也能给自己留下一些值得纪念和回忆的东西。
文章目录
前言
本次的学习任务之中,所涉及的到的运算符有以下内容
提示:以下是本篇文章正文内容,下面案例可供参考
一、算数运算符的基本使用(+、-、*、/、%、++、–)
(1)、简单案例如下
由于这个模块的内容比较简单我就直接用案例来说明,毕竟小学的算数方式都知道,如果不知道的话就有点需要回炉重造了
int num1 = 10;
int num2 = 5;
int result = num1 + num2;
System.out.println(result);//15
System.out.println(num1 - num2);//5
System.out.println(10 * 5);//50
System.out.println(10 / 5);//2
System.out.println(10 % 3);//1
//++:自增1
//++a:先自增1,再使用
int a = 10;
System.out.println(++a);//11
System.out.println(a);//11
//b++:先使用,在自增1
int b = 10;
System.out.println(b++);//10
System.out.println(b);//11
//--:自减1
//--c:先自减1,再使用
int c = 10;
System.out.println(--c);//9
System.out.println(c);//9
//d--:先使用,在自减1
int d = 10;
System.out.println(d--);//10
System.out.println(d);//9
示例:以上都是基本的算数运算符的基本使用,通过一些案例来进行解释。
重点解释:
关于自增(++),与自减(–)的具体使用与解释
1、自增(以 a++与 ++a作为案例解释)
a++:是先进行使用再自增,即:a如果被使用过一次了,下一次你看到a的话它将会是在原来的a上面增加过1的新a,并以此类推。
++a:是先进行自增然后使用,即如果给定一个原值 int a=1; 那么如果是 a=++a; 此时a的值为2。
2、自减(以a–与--a作为案例解释)
a–:是先使用再自减,与自增的规律相似。
–a:是先自减后使用,即如果给定一个原值 int a=1; 那么如果是 a=–a; 此时a的值为0。
(2)、深入算数运算符(以下需要对上一节内容的知识做回顾了,都是面试题)
//案例一:byte类型做运算,会向上转型成int
byte b1 = 10;
byte b2 = 20;
//10 - byte - 8位(占两个字节):0000,1010
//10 - int -32位(占八个字节):0000,0000,0000,0000,0000,0000,0000,1010
//20 - byte - 8位(占两个字节):0001,0100
//20 - int -32位(占八个字节):0000,0000,0000,0000,0000,0000,0001,0100
//30 - int -32位(占八个字节):0000,0000,0000,0000,0000,0000,0001,1110
//30 - byte - 8位(占两个字节):0001,1110
byte result = (byte)(b1+b2);//由于字面变量的类型不同所以需要进行强转
System.out.println(result);//30
//案例二:short类型做运算,会向上转型成int
short s1 = 10;
short s2 = 20;
short result = (short)(s1+s2);
System.out.println(result);
//案例三:描述下列计算结果的类型
byte b = 10;
short s = 10;
int i = 10;
long l = 10;
float f = 1.1F;
double d = 2.2;
System.out.println(b+s);//int类型
System.out.println(i+s);//int类型
System.out.println(l+s);//long类型
System.out.println(i+l);//long类型
System.out.println(i+f);//float类型
System.out.println(i+d);//double类型
//案例四:浮点类型不能直接做运算,要做运算会使用BigDecimal
double d1 = 0.5;
double d2 = 0.4;
System.out.println(d1-d2);//0.09999999999999998
//案例5:'a'的ASCII是97,这一块知识需要对ASCLL表进行熟悉,记住大写字母与小写字母之间的关系是小写字母比大写字母的值大32,即'a'比'A'大32,'a'为97 则'A'为65,相邻两个字母之间的数值相差1,
char c = 'a';
System.out.println(c+1);//98
(3)面试题部分
//经典面试题一:输出结果为?
int a = 8;
int b = (a++)+(++a)+(a*10);
System.out.println(b);//118
//a = 10
//b = 8 + 10 + 10
//经典面试题二:输出结果为?
int i = 0;
i = ++i;
//底层原理:
//i = (int)(i+1);
//i = i;
System.out.println(i);//1
int i = 0;
i = i++;
//底层原理:
//int temp = i;--temp用于记录i最初的值
//i = (int)(i+1);
//i = temp
System.out.println(i);//0
扩展:
byte b = 10;
++b;//底层:b = (byte)(b+1);
short s = 10;
++s;//底层:s = (short)(s+1);
int i = 10;
++i;//底层:i = (int)(i+1);
long l = 10;
l++;//底层:l = (long)(l+1);
二、赋值运算符(=、+=、-=、*=、/=、%=)
(1)、案例展示
int i = 10;
i += 10;//i = (int)(i+10);
i -= 10;//i = (int)(i-10);
i *= 5 ;//i = (int)(i*5);
i /= 5 ;//i = (int)(i/5);
i %= 3 ;//i = (int)(i%3);
System.out.println(i);//1
(2)、面试题部分
//经典面试题一:输出结果为?
//一次性声明多个变量
int a,b;
a = b = 100;//把100赋值给b,b再赋值给a
System.out.println(a);//100
System.out.println(b);//100
//经典面试题二:下面的两种写法结果分别是?
short s=1;
//s = s+1;//报错:short类型的变量s 与 int类型的数字字面量1 做运算的结果是int类型 ,因此必须强转
short s=1;
s += 1;
//s = (short)(s+1);
//赋值规则:
s + = 1 s = (T)((s) + (1) )
//复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1)op(E2)),
//其中T是E1的类型。
三、关系运算符(==、!=、>、>=、<=)
(1)、案例展示
这里需要强调一点:所有的关系运算符的值都是boolean类型,即只有 true 与 false
代码如下(示例):
System.out.println(10 == 10);//true
System.out.println(10 != 10);//false
System.out.println(10 > 10);//false
System.out.println(10 >= 10);//true
System.out.println(10 < 10);//false
System.out.println(10 <= 10);//true
总结:1.=是赋值号,==是判断两个值是否相等
2.关系运算符运算的结果都是boolean值
(2)、面试题
//经典面试题一:输出结果为?
int x = 10;
int y = 10;
boolean flag = (x == y);
System.out.println(flag);//true
flag = (x = y);//报错:boolean不能与其他类型兼容
System.out.println(flag);
//经典面试题二:输出结果为?
boolean b1 = true;
boolean b2 = false;
boolean b3 = (b1 == b2);
System.out.println(b3);//false
boolean b4 = (b1 = b2);
System.out.println(b4);//false
四、逻辑运算符(&与 &&短路 |或 ||短路或 ^异或 !非)
(1)案例演示
//&与:前后两者都是boolean值,同时成立(true),结果才为true
System.out.println(true & true);//true
System.out.println(true & false);//false
System.out.println(false & true);//false
System.out.println(false & false);//false
//&&短路与:前后两者都是boolean值,同时成立(true),结果才为true
System.out.println(true && true);//true
System.out.println(true && false);//false
System.out.println(false && true);//false
System.out.println(false && false);//false
//& vs &&
//&:判断前者为false后,才会判断后者
//&&:判断前者为false后,不会判断后者,所以效率更高
//ArithmeticException - 算数类异常
System.out.println(false && 10/0>5);
//|或:前后两者都是boolean值,有一个成立(true),结果就为true
System.out.println(true | true);//true
System.out.println(true | false);//true
System.out.println(false | true);//true
System.out.println(false | false);//false
//||短路或:前后两者都是boolean值,有一个成立(true),结果就为true
System.out.println(true || true);//true
System.out.println(true || false);//true
System.out.println(false || true);//true
System.out.println(false || false);//false
//| vs ||
//|:判断前者为true,还会判断后者
//||:判断前者为true,不会判断后者,所以效率更高
System.out.println(true || 10/0>5);
//^异或:前后两者都是boolean值,相同为false,不同为true
System.out.println(true ^ true);//false
System.out.println(true ^ false);//true
System.out.println(false ^ true);//true
System.out.println(false ^ false);//false
//!非 - 置反
boolean bool1 = true;
System.out.println(!bool1);//false
boolean bool2 = false;
System.out.println(!bool2);//true
(2)、逻辑运算符的经典案例
这里引入了一个新的知识 Scanner类,是一个工具包 它的使用方式很简单以下面案例为基础可以仿造,含义:Java给我们提供的一个类,这个类的功能就是在控制台输入数据
import java.util.Scanner;
public class Test06{
public static void main(String[] args){
/**
知识点:逻辑运算符的案例
在dos窗口输入一个数字,判断是否在50~100的区间内
*/
//1.输入一个int数字
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个int值:");
int num = scan.nextInt();
//2.判断是否在50~100的区间内
boolean bool = num>50 && num<100;
//3.输出结果
System.out.println("该值是否在50~100的区间内:" + bool);
}
}
五、字符串拼接符 ( +)
(1)案例演示
public class Test08{
public static void main(String[] args){
/**
知识点:字符串拼接符 +
+两侧都是数值,此符号为算术运算符
+有一侧或者两侧是字符串,此符号为字符串拼接符
*/
System.out.println(1+2+"abc" + "def" +1+2);//3abcdeef12
// 3 +"abc" + "def" +1+2
// "3abc" + "def" +1+2
// "3abcdef" +1+2
// "3abcdef1" +2
// "3abcdef12"
}
}
(2)拓展、表达式部分(看案例就行,很容易理解)
import java.util.Scanner;
public class Test09{
public static void main(String[] args){
/**
知识点:表达式
5+6:算数表达式
5>6:关系表达式
true & false:逻辑表达式
知识点:三目运算符/三元运算符
语法:
数据类型 变量 = (表达式)?值1:值2;
理解:
表达式的结果必须是boolean类型
true - 将值1赋值给变量
false- 将值2赋值给变量
做实验:
int num = (false)?10:20;
System.out.println(num);
案例1:在控制台输入两个int类型的数字,输出最大值
//创建Scanner类的对象scan
Scanner scan = new Scanner(System.in);
//输入两个数字
System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
//判断大小
int max = (a>b)?a:b;//判断a是否大于b,如果大于就返回a,否则返回b
//输出最大值
System.out.println("最大值为:" + max);
案例2:在控制台输入两个int类型的数字,输出最小值
//创建Scanner类的对象scan
Scanner scan = new Scanner(System.in);
//输入两个数字
System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
//判断大小
int min = (a<b)?a:b;//判断a是否大于b,如果小于就返回a,否则返回b
//输出最大值
System.out.println("最小值为:" + min);
案例3:在控制台输入三个int类型的数字,输出最大值
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
System.out.println("请输入第三个数字:");
int c = scan.nextInt();
int max = (a>b)?a:b;
max = (max>c)?max:c;
System.out.println("最大值为:" + max);
案例4:在控制台输入三个int类型的数字,由小到大输出
*/
}
}
六、三目运算符(以面试题+案例的方式)
public class Test10{
public static void main(String[] args){
/**
知识点:深入三目运算符
扩展面试题1:
int a = 5;
System.out.println((a<5)?10.9:9);//9.0
扩展面试题2:
char x = 'x';//'x' - ASCII - 120
int i = 10;
System.out.println(false?i:x);//120
扩展面试题3:
char x = 'x';//'x' - ASCII - 120
System.out.println(false?100:x);//x
System.out.println(false?65536:x);//120
三目运算符返回值规则:
1.值1和值2是常量的情况,就会按照取值范围大的类型返回数据
2.值1和值2是变量的情况,就会按照取值范围大的类型返回数据
3.值1是常量,值2是变量的情况,值1是否在值2所属类型的取值范围里
在,就按照值2类型返回数据
不在,就按照值1类型返回数据
*/
}
}
七、位运算符(&与 |或 ^异或<< 左移>> 右移>>>无符号位右移)
含义:将十进制的数据转换为二进制再进行运算
public class Test11{
public static void main(String[] args){
//&:同位比较,两者为1,结果才为1
byte b1 = 23;//0001,0111
byte b2 = 25;//0001,1001
//0001,0001
//23 byte - 0001,0111
//23 int - 0000,0000,0000,0000,0000,0000,0001,0111
//25 byte - 0001,1001
//25 int - 0000,0000,0000,0000,0000,0000,0001,1001
//17 int - 0000,0000,0000,0000,0000,0000,0001,0001
//17 byte - 0001,0001
byte result = (byte)(b1 & b2);
System.out.println(result);//17 - 0001,0001
//|:同位比较,两者有1,结果就为1
byte b1 = 23;//0001,0111
byte b2 = 25;//0001,1001
//0001,1111
System.out.println(b1 | b2);//31 - 0001,1111
//^:同位比较,两者相同为0,不同为1
byte b1 = 23;//0001,0111
byte b2 = 25;//0001,1001
//0000,1110
System.out.println(b1 ^ b2);//14 - 0000,1110
&、|、^:前后两者都是数值,该符号为位运算符
&、|、^:前后两者都是boolean值,该符号为逻辑运算符
}
}
八、转义字符(\n、"、’、\、\t)
案例演示
public class Test12{
public static void main(String[] args){
System.out.print("好好学习\n");
System.out.print("好好学习\n");
System.out.println("我说:\"好好学习\"");
System.out.println("我说:\'好好学习\'");
System.out.println("我说:\\好好学习\\");
System.out.println("3*3=9\t3*4=12\t3*5=15");
System.out.println("4*3=12\t4*4=16\t4*5=20");
知识点:常量
含义:在程序执行过程中不可变的量
分类:
1.数字字面量(ps:69、100、200)
2.字面值常量(ps:"张三","李四")
3.final(最终的)修饰的变量
final int i = 100;
System.out.println(i);
//字面值常量和final(最终的)修饰的变量:存储在常量池中,直到项目结束才会被销毁
}
}
九、任务总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了Java中的各种运算符的使用,而在以后的学习中会经常使用的,本次任务我想了一下用案例来解释会更加清晰一点,如果用词太专业了的话往往会造成意思不明的毛病,所以本次分享就到这里