なぜ a は b と違うのですか?
String a = "BuildGUID10035\0528\0440";
String b = "BuildGUID10035" + '\0' + 528 + '\0' + 440;
System.out.println("A: " + a);
System.out.println("B: " + b);
System.out.println(a.equals(b));
なぜ a は b と違うのですか?
String a = "BuildGUID10035\0528\0440";
String b = "BuildGUID10035" + '\0' + 528 + '\0' + 440;
System.out.println("A: " + a);
System.out.println("B: " + b);
System.out.println(a.equals(b));
\052
最初の文字列では、単一の8進数のエスケープシーケンスとして解釈されるため、これらは異なります(同様に\044
)。
次の2つの文字列は同等に比較されます。
String a = "BuildGUID10035\000528\000440";
String b = "BuildGUID10035" + '\0' + 528 + '\0' + 440;
(でを置き換えまし\0
た\000
。a
)
\ に続く 3 桁の数字は、8 進数のエスケープ シーケンスを表します。したがって、文字列 a は BuildGUID10035*8$0 になり、文字列 b とは等しくありません。
\052 および \044 は、文字の 8 進表現です。\ と 3 桁の数字で始まるものはすべて、8 進形式の文字と見なされます。したがって、2 つの文字列は等しくありません。
\0 はヌル文字のプレースホルダーです。したがって、最初の文字列は \052 ... \044 として解釈され、2 番目の文字列は BuildGUID10035{NULL}528{NULL}440 となります。
(明らかに、私が言いたいことの例として NULL を使用しました...)
\052 と \044 はそれ自体で解釈されます