オペレーター1名
1.1 概要
演算子はオペランド连接
表达式
に使用され操作数
、オペランドに対して演算を実行します。
たとえば、式 num1+num2、そのオペランドは num1 と num2、演算子は「+」です。
Java 言語では、演算子は 5 つのタイプに分類できます。
算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符。
オペランドの違いに応じて、演算子は と に分類さ单目运算符
れ双目运算符
ます三目运算符
。
単項演算子にはオペランドが 1 つだけあり、二項演算子には 2 つのオペランドがあり、三項演算子には 3 つのオペランドがあります。
ビット演算子にはバイナリ ビットの演算が含まれますが、Java プログラムではあまり使用されません。
1.2 オペレーターのチートシート
基本的なデータ型と文字列の操作
概念:
文字列タイプ: String
文字列は基本データ型ではなく、参照データ型です。文字
列を表すには、「」のペアを使用します。文字列には 0、1 つ以上の文字を含めることができます。
宣言方法はプリミティブ データ型の場合と同様です。例: String str = "荘岩教育";
运算规则 1、任意八种基本数据类型的数据与 String 类型只能进行连接“+”运算,且结果 一定也是 String 类型
运算规则 1、任意八种基本数据类型的数据与 String 类型只能进行连接“+”运算,且结果
一定也是 String 类型
System.out.println("" + 1 + 2);//12
int num = 10;
boolean b1 = true;
String s1 = "abc";
String s2 = s1 + num + b1;
System.out.println(s2);//abc10true
//String s3 = num + b1 + s1;//编译不通过,因为 int 类型不能与 boolean 运算
String s4 = num + (b1 + s1);//编译通过
2、String 类型不能通过强制类型()转换,转为其他的类型
String str = "123";
int num = (int)str;//错误的
int num = Integer.parseInt(str);//正确的,后面才能讲到,借助包装类的方法才能转
例 2: 「+」記号の 2 つの使用法
1 つ目のタイプ: + の両辺が数値の場合、+ は加算を意味します。2
つ目のタイプ: + の少なくとも 1 つの辺が文字列の場合、+ は結合を意味します
public class ArithmeticTest2 {
public static void main(String[] args) {
// 字符串类型的变量基本使用
// 数据类型 变量名称 = 数据值;
String str1 = "Hello";
System.out.println(str1); // Hello
System.out.println("Hello" + "World"); // HelloWorld
String str2 = "Java";
// String + int --> String
System.out.println(str2 + 520); // Java520
// String + int + int
// String + int
// String
System.out.println(str2 + 5 + 20); // Java520
}
}
2. String 型は、必須の type() 変換では他の型に変換できません。
String str = "123";
int num = (int)str;//错误的
int num = Integer.parseInt(str);//正确的,后面才能讲到,借助包装类的方法才能转
1.3 演習: インクリメントとデクリメントのテスト
パッケージの作成: cn.tedu.basic
クラスの作成: TestOperator.java
package cn.tedu.basic;
/**本类用于测试取余运算符*/
public class TestOperator {
//0.创建程序的入口函数main
public static void main(String[] args) {
//1.测试除法与取余数
System.out.println(25 / 10);//2
System.out.println(25 % 10);//5
/**
* 在使用%运算符的时候如果被除数小于除数。
* 那么,打印的结果就是被除数
* */
System.out.println(2%3);
System.out.println(5%6);
/*
* 在除数中如果,被除数小于除数。那么,打印的结果是0
* */
System.out.println(5/6);
//2.练习1:获取一个两位数59的十位与个位
int x = 59;
System.out.println(x/10);//打印十位,5
System.out.println(x%10);//打印个位,9
//3.练习2:获取一个三位数159的百位、十位与个位
int y = 159;
System.out.println(y / 100);//打印百位
System.out.println(y / 10 % 10);//打印十位
System.out.println(y % 10);//打印个位
//4.测试自增自减运算符
/** 前缀式:符号在前:++a --a ,先改变变量本身的值,再使用,比如打印
* 后缀式:符号在后: a++ a--,先使用,再改变变量本身的值
* ++: 相当于给变量本身的值+1
* --: 相当于给变量本身的值-1
* */
System.out.println("我是一个无情的分界线");
int a = 1;
System.out.println(++a);//2
System.out.println(a);//2
int b = 1;
System.out.println(b++);//1
System.out.println(b);//2
int c = 1;
System.out.println(--c);//0,符号在前,先自减,再打印
System.out.println(c);//0,上面已经自减过了
int d = 1;
System.out.println(d--);//1,符号在后,先打印,再自减
System.out.println(d);//0,打印过后,自减成0
//之前的代码会对后面的代码产生影响,c的值是0
System.out.println(c);//0
System.out.println(--c-c-c--);//1,-1-(-1)-(-1)=1
System.out.println(c);//-2,经历了两次自减,所以0-2=-2
}
}
+= -= *= /= %=
の使用法
//举例说明+= -= *= /= %=
int m1 = 10;
m1 += 5; //类似于 m1 = m1 + 5 的操作,但不等同于。
System.out.println(m1);//15
//练习 1:开发中,如何实现一个变量+2 的操作呢?
// += 的操作不会改变变量本身的数据类型。其他拓展的运算符也如此。
//写法 1:推荐
short s1 = 10;
s1 += 2; //编译通过,因为在得到 int 类型的结果后,JVM 自动完成一步
强制类型转换,将 int 类型强转成 short
System.out.println(s1);//12
//写法 2:
short s2 = 10;
//s2 = s2 + 2;//编译报错,因为将 int 类型的结果赋值给 short 类型的
变量 s 时,可能损失精度
s2 = (short)(s2 + 2);
System.out.println(s2);
两种方式的区别:
s = s+2; //① 编译报错
s += 2; //② 正常执行
//①和②有什么区别?
s = s + 2和s += 2的作用都是增加2。
不过使用起来还是有区别的,如果s是int类型,这两者效果完全相同,但如果s是byte或short类型,第一种编译则会报错,因为byte类型或short类型的s和int类型的2相加,其结果是需要int类型来接收,所以byte s = s + 2或者short s = s + 2是不符合规则的,而第二种则不会报错,因为+=不会改变本身变量的数据类型。
关系运算符
比较运算符的结果都是 boolean 型,也就是要么是 true,要么是 false。
• > < >= <= :只适用于基本数据类型(除 boolean 类型之外)
== != :适用于基本数据类型和引用数据类型
• 比较运算符“==”不能误写成“=”
逻辑运算符
– & 和 &&:表示"且"关系,当符号左右两边布尔值都是 true 时,结果才能为 true。否则,为 false。
– | 和 || :表示"或"关系,当符号两边布尔值有一边为 true 时,结果为true。当两边都为 false 时,结果为 false
– ! :表示"非"关系,当变量布尔值为 true 时,结果为 false。当变量布尔值为 false 时,结果为 true。 – ^ :当符号左右两边布尔值不同时,结果为 true。当两边布尔值相同时,结果为 false。
「&」と「&&」を区別します。
– 同点: シンボルの左側が true の場合、両方ともシンボルの右側の演算を実行
– 相違点: &: シンボルの左側が false の場合、右側の演算を継続シンボルの
&&: シンボルの左側が false の場合、続行しないでください。シンボルの右側で操作を実行します
– 提案: 開発中は、&& を使用することをお勧めします。
==「|」と「||」の区別: ==
- 同じ点: シンボルの左側が false の場合、どちらもシンボルの右側で演算を実行します
- 違い: | : 左側が false の場合シンボルの左側が true の場合、シンボルの右側の実行を続行し
ます。 || の演算: シンボルの左側が true の場合、シンボルの右側の演算は実行されません
。開発では || を使用することをお勧めします。
1.4 演習: 論理演算子のテスト
パッケージの作成: cn.tedu.basic
クラスの作成: TestOperator2.java
package cn.tedu.basic;
/**本类用于测试逻辑运算符*/
public class TestOperator2 {
public static void main(String[] args) {
/**与:全真才真*/
System.out.println("测试单与:");
System.out.println(true & true);
System.out.println(true & false);
System.out.println(false & true);
System.out.println(false & false);
System.out.println("测试双与:");
System.out.println(true && true);
System.out.println(true && false);
System.out.println(false && true);
System.out.println(false && false);
/**或:全假才假*/
System.out.println("测试单或:");
System.out.println(true | true);
System.out.println(true | false);
System.out.println(false | true);
System.out.println(false | false);
System.out.println("测试双或:");
System.out.println(true || true);
System.out.println(true || false);
System.out.println(false || true);
System.out.println(false || false);
}
}
ビット演算子
左にシフト: <<
演算規則:一定の範囲内で左シフトしたデータは、すべて元のデータと等価になります*2。(正の数と負の数の両方が適用可能)
3<<4 は、3 2 の 4 乗 => 3 16 => 48のようなものです。
-3<<4 は、-3 2 の 4 乗 => -3 16 => -48のようなものです。
(2) 右にシフト: >>
演算規則:一定の範囲内で、データを右に移動するたびに、元のデータ/2と等価になります。(正負どちらでも
可)
【注】割り切れない場合は切り捨ててください。
69>>4 は、69/2 4 倍 = 69/16 =4 に似ています。
-69>>4 は、-69/2 4 倍 = -69/16 = -5 のようなものです。
(3) 符号なし右シフト: >>>
演算規則: 右シフト後、左側の空きビットをそのまま 0 で埋めます。(正の数と負の数の両方が適用可能)
69>>>4 は 69/2 4 倍 = 69/16 =4 に似ています。
-69>>>4 結果: 268435451
三項演算子
条件演算子の形式:
(条件表达式)? 表达式 1:表达式 2
説明: 条件式はブール型の結果であり、ブール値に応じて式 1 または式 2 を選択します。
1.5 演習: 2 つの数値の最大値を見つけます
パッケージの作成: cn.tedu.basic
クラスの作成: TestMaxNum.java
package cn.tedu.basic;
import java.util.Scanner;
/**需求:接收用户输入的两个整数,并比较输出这两个数的最大值*/
public class TestMaxNum {
public static void main(String[] args) {
//1.提示用户输入
System.out.println("请输入您要比较的第一个整数:");
//2.接收用户输入的整数,并把这个值交给变量a来保存
int a = new Scanner(System.in).nextInt();
System.out.println("请输入您要比较的第二个整数:");
int b = new Scanner(System.in).nextInt();
//3.比较接收两个数,使用三元运算符
/**1 ? 2 : 3
* 1是表达式,若1的结果为true,结果取2位置,若1的结果为false,结果取3位置
* */
//4.定义变量max来保存比较的最大值
int max = a > b ? a : b;
//5.打印最大值
System.out.println("两个数的最大值是:"+max);
/**思考题:如何判断3个数的最大值? int max = a>b?(a>c?a:c):(b>c?b:c);*/
}
}
1.6 演習: 平年における閏年を求める
パッケージの作成: cn.tedu.basic
クラスの作成: Testyear.java
//需求:接收用户输入的年份,判断是平年还是闰年
package cn.tedu.basic;
import java.util.Scanner;
/**
* 需求:接收用户输入的年份,判断是平年还是闰年
* 如果年份是闰年,需要满足下面两个条件之一:
* 条件1:能被4整除,并且不能被100整除
* 条件2:能被400整除
* */
public class Test3_Year {
public static void main(String[] args) {
//1.提示并接收用户输入的年份
System.out.println("请输入您要判断的年份:");
int year = new Scanner(System.in).nextInt();
//2.定义一个变量用来保存结果
String result = "平年";//默认值是平年,假设每年都是平年
//3.判断用户输入的年份是否满足闰年的条件
/**解决方案1*/
/**条件1:能被4整除,并且不能被100整除*/
// if(year % 4 == 0) {//能被4整除
// if(year %100 != 0) {//不能被100整除
// result = "闰年";//符合闰年的条件1,修改结果为闰年
// }
// }
// /**条件2:能被400整除*/
// if(year % 400 == 0) {//能被400整除
// result = "闰年";//符合闰年的条件2,修改结果为闰年
// }
/**解决方案2*/
/**判断结构 if(判断条件){满足判断条件以后执行的代码} */
//if(条件1 || 条件2){是闰年 }
//if((小条件1 && 小条件2) || 条件2){ 是闰年 }
//if((能被4整除 && 不能被100整除) || 能被400整除){ 是闰年 }
if((year % 4 == 0 && year %100 != 0) || year % 400 == 0){
result = "闰年";//符合闰年的条件,修改结果为闰年
}
System.out.println(year+"年是"+result);
}
}
2 拡張サプリメント:
2.1 要約 1: 算術演算子の自己インクリメント演算子と自己デクリメント演算子
a はオペランド、++ は自己インクリメント演算子、- - は自己デクリメント演算子、自己インクリメント演算子と自己デクリメント演算子は次のことができます。変数の前に置くこともできますが、変数の後ろに置くこともできます (例: a++、++a、a- -、- -a など)。自動インクリメント (++):プレフィックス (++a など) とサフィックス (a++ など) を付けた
変数の値に 1 を加算します。
プレフィックス タイプは使用前に 1 を追加し、サフィックス タイプは使用後に 1 を追加します。
自己減分 (- -): 変数の値を 1 ずつ減らします。
プレフィックス タイプ (- -a など) とサフィックス タイプ (a- - など)。プレフィックス タイプは使用する前に 1 を減算し、サフィックス タイプは最初に使用してから 1 を減算します。
2.2 まとめ 2: 論理演算子
論理演算子は、2 つの関係式またはブール変数を接続して、複数の関係式の組み合わせ判定問題を解決します。
論理演算子によって返される演算結果はブール型であることに注意してください
。通常、 false を表すには 0 を使用し、1 を使用しますtrue を表す
and: 関係を表す
& single and: 1 & 2、結果は true である必要があり、1 と 2 の両方が true である必要があります
&& double and (短絡 and): 1 && 2、1 が false の場合、2 はプログラムの効率を向上させるために短絡されます。
Or: OR| の関係を示します
。 単一 OR: 1 | 2、結果は true になる必要があり、1 と 2 のいずれか 1 つだけが true である必要があります
||ダブル OR (短絡論理和): 1| | 2、1 が true の場合、プログラム効率を向上させるために 2 が短絡されます。
2.3 まとめ 3: 優先順位の制御 式
中に複数の演算子が含まれる場合、演算子の優先順位を考慮する必要があり、優先順位の高い演算子が先に演算に参加し、優先順位の低い演算子が後から演算に参加します。実際の開発では演算子の優先順位を覚える必要はなく、また演算子の優先順位を意図的に使用するのではなく、優先順位が不明瞭な場合には括弧を使用して優先順位を管理してください。
優先順位 | オペレーターの説明 | Java 演算子 |
---|---|---|
1 | 括弧 | ()、[]、{} |
2 | サイン | +、- |
3 | 単位演算子 | ++、-、~、! |
4 | 乗算、除算、剰余 | *、/、% |
5 | 足し算、引き算 | +、- |
6 | シフト演算子 | <<、>>、>>> |
7 | 関係演算子 | <、<=、>=、>、インスタンス |
8 | 等価演算子 | ==、!= |
9 | ビットごとの AND | & |
10 | ビット単位の XOR | ^ |
11 | ビットごとまたは | / |
12 | 条件と | && |
13 | 状態や | // |
14 | 三項演算子 | ? : |
15 | 代入演算子 | <、<=、>=、>、インスタンス |
16 | ビット単位の代入演算子 | &=、/=、<<=、>>=、>>>= |
- 式の実行順序を制御するために操作の優先順位に依存しすぎないでください。これは
可読性が高すぎるため、() を使用して式の実行順序を制御するようにしてください。 - 式を複雑にしすぎないでください。式が複雑すぎる場合は、
いくつかのステップに分けて完成させてください。例: (num1 + num2) * 2 > num3 &&
num2 > num3 ? num3 : num1 + num2;