Javaの研究ノートに考えて
pikzas
2019年3月3日
第3章 - 演算子
知識ポイント
算術演算子
「+」特別な文字列処理時間
従来の算術演算子は加算され、減算モジュロら割り当て(+ - * / =%)、これらの演算子のすべてのタイプを直接使用することができる基本的なデータであるが、オブジェクトは、メモリアドレスが等しい持つことができると判断され、割り当ての範囲かどうか(== ,! =、=)演算子を使用することができます。この特定のStringオブジェクト型への参照のために、あなたはまた、Javaのシンタックスシュガーを提供している使用済みのスプライス演算子(+)、逆コンパイルバイトコードでしょうかもしれ「+」記号はのStringBuffer appendメソッドに置き換えられます。
オブジェクト割当処理における「=」特殊処理(エイリアス現象)
Javaは、値によって渡されるため、この現象が発生する
基本データ型のために、実際には、特定のスタックを指す変数の値は、= B行うよう割り当て、実際にBの値がコピーされたとき変数。
参照データ型、M = Nこの操作は、変数n尖った物体であるため、アドレス M場合は、この時点で、Mに割り当てられ、N個の同一のメモリアドレスに同じオブジェクトを指し、いずれかのMスルーnまたはオブジェクトへの変更、オブジェクト参照(すなわち、可変)の全ての点は、この変更を反映します。
class Tank{
int level;
}
public class Demo{
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.level = 12;
t2.level = 34;
print("--1--"+t1.level+"---"+t2.level);
t1 = t2; // t1 变量的指针指向了t2 的所指向的那个对象
t1.level = 56; // 通过t1 对对象作出改变
print("--2--"+t1.level+"---"+t2.level);
}
// 打印结果
// --1--12---34
// --2--56---56
エイリアシングは、メソッド呼び出しに表示されます
public class Test {
public static void f(int x) {
x = 12;
}
public static void f2(String args) {
args = "1234";
}
public static void f3(Bean bean) {
bean.x = 123;
}
public static void main(String[] args) {
int y = 44;
f(y);
System.out.println(y);
String str = "xxx";
f2(str);
System.out.println(str);
Bean bean = new Bean();
bean.x = 111;
f3(bean);
System.out.println(bean.x);
}
}
class Bean{
public int x;
}
// 输出结果为
44
xxx
123 //为什么这个值发生了变化,而上面两个没有呢
整数部のみのjavaを返す除算演算は(/)丸みを帯びたではありません。
自動インクリメントとデクリメント
- 接頭インクリメントおよびデクリメント(++または-A-)第1の動作を実行する、生成された値のために
- 値氏インクリメントするとなります(++またはA--)のサフィックスをデクリメント、操作が実行されます
class Demo{
public static void main(String[] args){
int i = 1;
System.out.println("i: " + i); //1
System.out.println("++i:" + ++i); //2
System.out.println("i++:" + i++); //2
System.out.println("i: " + i); //3
System.out.println("--i:" + --i); //2
System.out.println("i--:" + i--); //1
}
}
関係演算子
結果関係演算子は、ブール値trueまたはfalseを返します。
(>)、以下(<)より大きいすべての演算子含む、より大きいか(> =)に等しい、またはそれ未満(<=)に等しい、等価(==)、等しくありません(!=)。より多くのオペレータは、ブール値以外のすべてのオブジェクトに作用することができます。
- 大きな存在していない他の誰よりも唯一の真または偽のブール値。
- 参照データタイプに作用する、そのアドレスが比較され、必要に応じて、比較対象「値」は、上記オペレータ場合、オブジェクトは、メソッドに等しいオーバーライドする必要があります。パッケージの基本となるデータ型のデフォルトでは、治療に等しいオーバーライドを行う必要があります。
public class TestOne{
public static void main(String[] args) {
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(i1 != i2); //true
System.out.println(i1 == i2); //false
System.out.println(i1 > i2); //false
System.out.println(i1 < i2); //false
System.out.println(i1.equals(i2)); //true
}
}
論理演算子
パラメータは、ブール型の計算に関与する場合、Javaは、論理演算を行う、強く型付けされた言語であるため、そうJS = trueと(123 && 123)を実行することができません。注短絡論理演算処理は、演算結果後に決定することができることを、発現が操作後に停止した後、さらに発現します。
直接定数
一般に、プログラムに我々が使用する数値は、小数点されている、指定された状況下で、2進数、8進数または16進数でも使用することができます。
class Demo{
int i = 0x2f; // 0x或者0X 开头表示该数字为十六进制
int j = 0177; // 0 开头表示该数字为八进制
int m = 0b101; // 0b 开头表示该数字为二进制
int n = 100; // 默认情况下表示为十进制
long l = 123123123;
long l1 = 234234234L;
long l2 = 345345345L;
float f = 123.234;
float f1 = 12.333f;
float f2 = 23.555F;
double d1 = 1.234d;
double d2 = 2.345D;
}
いくつかの特別な16進数は、char型の2バイトとして、より便利な時間を表すに= 16ビットは範囲0のビットを占有- 2 16 1,2- 8乗✖️28 -1 = 256× 256-1 = 65535から1 = 0xFFFFの-1
異なる進変換方法は、数は、次いでABとして10進数に変換進数の桁の16進数を表すM = 0X mAbの場合、そのようなフォーマット仮定される:A 16× (2-1) + B×16 (1-1)
ビット単位の演算子
(〜)、排他的論理和(^)、非|シンボルは、ビット演算を持っている(&)、または()
最初は二進数に変換した後、右から1ビット操作が真、0閲覧偽のようになります。取ることにより、左へ。論理演算子と同様ビット単位演算子は、^その後、0,1またはテイクを取り、2つの同一の場合とみなすことができます。
class Demo{
public static void main(String[] args){
System.out.println(1&1); // 1
System.out.println(1&0); // 0
System.out.println(0&1); // 0
System.out.println(0&0); // 0
System.out.println(1|1); // 1
System.out.println(1|0); // 1
System.out.println(0|1); // 1
System.out.println(0|0); // 0
System.out.println((0b11)^(0b11)); // 0
System.out.println((0b10)^(0b10)); // 0
System.out.println((0b11)^(0b10)); // 1
System.out.println((0b11)^(0b00)); // 3
// ~按位去反 输入0得1 输入1得0
}
}
シフト演算子
符号付き右シフト(>>>)右(<< >>)と符号なし、左
型変換
より大きな型に小さいタイプから換算すると、その後、彼らは自動的に、変数の型変換をすることができません。一方、あなたはすでに情報損失のリスクの可能性を知っているということを示してを明示的に肯定する必要があります。
( - 29.5)= -29二重又はフロートデータが常にその最も近いゼロ(INT)(29.5)からの値= 29、(INT)対数軸を取って、intに変換
常にビッグターンに、あなたは丸め達成したい場合は、恐らくMath.round()を使用する必要があります。
class Demo{
public static void main(String[] args){
System.out.println(Math.round(-29.3)); //-29
System.out.println(Math.round(-29.5)); //-29
System.out.println(Math.round(-29.7)); //-29
System.out.println(Math.round(29.3)); //29
System.out.println(Math.round(29.5)); //30
System.out.println(Math.round(29.7)); //30
}
}