0

次のように String [] 配列を使用した場合:

 import java.lang.String.*; 

 import java.text.DecimalFormat; 

 import java.text.NumberFormat;

public class JavaJoe

{

public static void main(String args[]) 

{

String [] day = {"Monday", "Tuesday", "Wednesday", "Thursday", "Saturday", "Sunday"};

これの出力:

if(day[0] == ("Monday"))

{

double cost = 30;

double totalCost = 30 * 1.15; //cost including tax

money = money - totalCost;

System.out.println("It is " + day + " and Joe has to spend " + decimal.format(totalCost) + " on a new pair of shoes. He has " + decimal.format(money) + " left.");

} //if

私にこれをくれました:

[Ljava.lang.string;@1ea2dfe で、Joe は $34.50 を使わなければなりません。彼には $165.50 が残っています。

なぜか教えてくれますか?月曜日だと教えてくれないのはなぜですか?前もって感謝します!

4

8 に答える 8

6

toStringJava配列のメソッドを呼び出す配列自体を印刷しているためです。このメソッドの実装を確認すると、実際の値は出力されず、そのオブジェクトの一意のハッシュが出力されることがわかります。

Object.toString()

オブジェクトの文字列表現を返します。一般に、toString メソッドは、このオブジェクトを「テキストで表す」文字列を返します。結果は、人が読みやすい簡潔で有益な表現になるはずです。すべてのサブクラスがこのメソッドをオーバーライドすることをお勧めします。

クラス Object の toString メソッドは、オブジェクトがインスタンスであるクラスの名前、アットマーク文字 `@'、およびオブジェクトのハッシュ コードの符号なし 16 進数表現で構成される文字列を返します。つまり、このメソッドは次の値に等しい文字列を返します。

getClass().getName() + '@' + Integer.toHexString(hashCode())

コードを変更dayして、文字列比較にorをday[0]使用します。参照等価です。equalsequalsIgnoreCase==

if(day[0].equals("Monday")) 
    System.out.println("It is " + day[0] + " and Joe has to spend " + decimal.format(totalCost) + " on a new pair of shoes. He has " + decimal.format(money) + " left.");
于 2013-05-21T10:12:28.973 に答える
0

配列を印刷しているため

日ではなく日 [0] にする必要があります

于 2013-05-21T10:13:16.560 に答える
0

== 演算子は、2 つの参照が同じオブジェクトを指しているかどうかをチェックしますが、.equals() 関数は文字列の内容をチェックします。

String name1 = new String("John");
String name2 = new String("John");
if(name1 == name2 )
{
  System.out.println("Both point to same object");
}
else
{
   System.out.println("Both point to different object");      
}

出力は次のとおりです。

Both point to different object

一方、

if(name1.equals(name2) )
{
  System.out.println("Both have same content");
}
else
{
   System.out.println("Both have different content");      
}

出力は次のとおりです。

Both have same content
于 2013-05-21T10:14:24.797 に答える
0

エラーはありません。要素ではなく標準出力に配列を出力しています。day[index] これは、配列全体を印刷する代わりに、オブジェクト (メモリ位置を印刷する) 印刷のデフォルトの toString() です。

于 2013-05-21T10:16:08.367 に答える