また、旧ドライバ--java文字列string乗り物酔いの酔いの旅

最初に、自分の薬を持参する乗り物酔いを経験ドライバがあり、文字列はまた、あなたが人生を疑うことがあり!

古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

最初の前菜

質問に耳を傾けてください!最初の質問:

        文字列ハロー=「こんにちは、世界!」; 
        
        文字列のhello1 = 新しい文字列( "Hello Worldの!" ); 
        System.out.println(ハロー == hello1)。
        System.out.println(hello.equals(hello1))。

 

古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

ヒント:==は、2つのオブジェクト参照が同じオブジェクトへの参照のみです比較します。

古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

そして、その答えを公開


ナレーター:

  1. 新しいStringは、新たなオブジェクトであり、文字列定数オブジェクトは同じではありません。
  2. 比較的等しい値であります

それは確かに楽しいではない、その後、戻ってきます。

第二のスープ

        文字列ハロー=「こんにちは、世界!」; 
        文字列hello2 =「こんにちは、世界!」; 
        System.out.println(ハロー == hello2)。
        System.out.println(hello.equals(hello2))。

 

古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

僧侶を席巻して立つことができませんでした

古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 


次へ:

两个String类型的常量表达式,如果标明的是相同的字符序列,那么它们就用相同的对象引用来表示。

第三道 副菜

        String hello="hello world!";    
        String append="hello"+" world!";
        System.out.println(hello==append);
        System.out.println(hello.equals(append));

 

古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

那就公布答案

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));

 

古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

不敢说了,还是公布答案吧

false
true
古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

官方资料中有这么一段话:

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.
古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

翻译一下:

>通过常量表达式运算得到的字符串是在编译时计算得出的,并且之后会将其当作字符串常量对待.

>在运行时通过连接运算得到的字符串是新创建的,因此要区别对待。

看黑色重点标注。

第五道 蔬菜类菜肴

        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
古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

旁边:

可以通过显示的限定运算得到的字符串为字符串常量,String.intern方法可以"限定"

第六道 甜品

        最終的な文字列豚=「長さ:10」最終的な文字列の犬=「長さ」+ pig.length()。
        System.out。println( "動物が等しい:" +豚== イヌ); 
        System.out.println( "動物は等しい:" +ブタ.equals(犬))。

 

私たちはその答えを見て、待つことができません

偽の
動物は同じである:真
古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

あなたは、演算子の優先順位を考えるならば理解して、「+」「==」よりも優先されます

古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

セブンス道路コーヒー、紅茶

古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

私たちは、厳しい乗り物酔いを参照してください、それが話題ではありません

古いドライバは、乗り物酔いです! --java文字列の乗り物酔いの旅

 

上記レッスン比較対象の参照によって、方法は==演算子は、値を比較する場合を除き、オブジェクトのオブジェクト識別子ではない代わりに好まれるべきであると等しいです。

参考資料

【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

おすすめ

転載: www.cnblogs.com/davidwang456/p/11459740.html