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 数组的方法。如果您检查此方法的实现,您会看到它不会打印实际值,而是会打印该对象的唯一哈希值。

对象.toString()

返回对象的字符串表示形式。通常,toString 方法返回一个“以文本方式表示”该对象的字符串。结果应该是一个简洁但信息丰富的表示,易于人们阅读。建议所有子类重写此方法。

Object 类的 toString 方法返回一个字符串,该字符串由对象作为实例的类的名称、at 符号字符“@”和对象的哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

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

现在在您的代码中更改dayday[0]并使用equalsorequalsIgnoreCase进行字符串比较。==是引用相等。

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 回答
1

比较Strings你必须使用equals

if(day[0].equals("Monday"))
于 2013-05-21T10:12:09.457 回答
1

您正在打印day,这是一个array.
使用day[0].

于 2013-05-21T10:12:11.390 回答
1

首先,用于equals比较字符串(即day[0].equals("Monday"))。

然后,打印day[0]而不是day.

于 2013-05-21T10:11:52.113 回答
0

因为您正在打印数组

应该是 day[0] 而不是 day

于 2013-05-21T10:13:16.560 回答
0

== 运算符检查两个引用是否指向同一个对象,而 .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

没有错误,您在标准输出中打印一个数组而不是它的元素。这是对象(打印内存位置)打印的默认 toString(),day[index] 而不是打印整个数组。

于 2013-05-21T10:16:08.367 回答
0

利用days[0].equals("Monday");

其次,代替System.out.println(day);使用System.out.println(day[0])

于 2013-05-21T10:17:45.107 回答