最初に、自分の薬を持参する乗り物酔いを経験ドライバがあり、文字列はまた、あなたが人生を疑うことがあり!
最初の前菜
質問に耳を傾けてください!最初の質問:
文字列ハロー=「こんにちは、世界!」; 文字列のhello1 = 新しい文字列( "Hello Worldの!" ); System.out.println(ハロー == hello1)。 System.out.println(hello.equals(hello1))。
ヒント:==は、2つのオブジェクト参照が同じオブジェクトへの参照のみです比較します。
そして、その答えを公開
偽
真
ナレーター:
- 新しいStringは、新たなオブジェクトであり、文字列定数オブジェクトは同じではありません。
- 比較的等しい値であります
それは確かに楽しいではない、その後、戻ってきます。
第二のスープ
文字列ハロー=「こんにちは、世界!」; 文字列hello2 =「こんにちは、世界!」; System.out.println(ハロー == hello2)。 System.out.println(hello.equals(hello2))。
僧侶を席巻して立つことができませんでした
真
真
次へ:
两个String类型的常量表达式,如果标明的是相同的字符序列,那么它们就用相同的对象引用来表示。
第三道 副菜
String hello="hello world!"; String append="hello"+" world!"; System.out.println(hello==append); System.out.println(hello.equals(append));
那就公布答案
true
true
旁边:
两个String类型的常量表达式,如果标明的是相同的字符序列,那么它们就用相同的对象引用来表示。
第四道 主菜
final String pig = "length: 10"; final String dog = "length: " + pig.length(); System.out.println(pig==dog); System.out.println(pig.equals(dog));
不敢说了,还是公布答案吧
false
true
官方资料中有这么一段话:
Strings concatenated from constant expressions (§15.28) are computed at compile time and then treated as if they were literals.
Strings computed by concatenation at run time are newly created and therefore distinct.
翻译一下:
>通过常量表达式运算得到的字符串是在编译时计算得出的,并且之后会将其当作字符串常量对待.
>在运行时通过连接运算得到的字符串是新创建的,因此要区别对待。
看黑色重点标注。
第五道 蔬菜类菜肴
final String pig = "length: 10"; final String dog = ("length: " + pig.length()).intern(); System.out.println(pig==dog); System.out.println(pig.equals(dog));
先看答案吧
true
true
旁边:
可以通过显示的限定运算得到的字符串为字符串常量,String.intern方法可以"限定"
第六道 甜品
最終的な文字列豚=「長さ:10」。 最終的な文字列の犬=「長さ」+ pig.length()。 System.out。println( "動物が等しい:" +豚== イヌ); System.out.println( "動物は等しい:" +ブタ.equals(犬))。
私たちはその答えを見て、待つことができません
偽の
動物は同じである:真
あなたは、演算子の優先順位を考えるならば理解して、「+」「==」よりも優先されます
セブンス道路コーヒー、紅茶
私たちは、厳しい乗り物酔いを参照してください、それが話題ではありません
上記レッスン比較対象の参照によって、方法は==演算子は、値を比較する場合を除き、オブジェクトのオブジェクト識別子ではない代わりに好まれるべきであると等しいです。
参考資料
【1】https://docs.oracle.com/javase/specs/jls/se12/html/jls-3.html#jls-3.10.5
【2】https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html