84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
String s1 = ""; String s2 = "\u0000"; String s3 = null;
s1、s2、s3 的区别,分别在字符串常量池和栈中的储存情况?
学习是最好的投资!
クラスバイトコードの観点から理解しましょう1.String s1 = ""、以下はコンパイルされたバイトコードです。この場合、実際には違いがないことがわかります s1="aaa"、これらはすべて文字列をプッシュします定数プールからスタックの先頭に移動し、それをローカル変数に代入します。
2. String s2=null の場合、この時点では定数プールに文字列定数は生成されず、null のみがスタックの先頭にプッシュされて変数に代入されます。
3. String s3 = "u0000" の場合、NUL を表す文字列、いわゆる制御文字が定数プールに生成されます。
テスト環境: jdk-8.0-102
クラスバイトコードの観点から理解しましょう
リーリー1.String s1 = ""、以下はコンパイルされたバイトコードです。この場合、実際には違いがないことがわかります s1="aaa"、これらはすべて文字列をプッシュします定数プールからスタックの先頭に移動し、それをローカル変数に代入します。
2. String s2=null の場合、この時点では定数プールに文字列定数は生成されず、null のみがスタックの先頭にプッシュされて変数に代入されます。
リーリー3. String s3 = "u0000" の場合、NUL を表す文字列、いわゆる制御文字が定数プールに生成されます。
リーリーテスト環境: jdk-8.0-102