String []数组错误

时间:2013-05-21 10:10:24

标签: java

当我使用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美元。

你能告诉我为什么吗?为什么不告诉我这是星期一?提前谢谢!

8 个答案:

答案 0 :(得分:6)

因为您正在打印数组本身,该数组调用Java数组的toString方法。如果检查此方法的实现,您将看到它不会打印实际值,而是会为该对象打印一个唯一的哈希值。

  

<强> Object.toString()

     

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

     

Object类的toString方法返回一个由。组成的字符串   对象是实例的类的名称,at-sign   字符“@”,以及散列的无符号十六进制表示   对象的代码。换句话说,此方法返回一个相等的字符串   价值:

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

现在,在代码中将day更改为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.");

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

比较Strings您必须使用equals

if(day[0].equals("Monday"))

答案 3 :(得分:1)

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

答案 4 :(得分:0)

因为您正在打印数组

应该是白天[0]而不是白天

答案 5 :(得分: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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

其次,而不是System.out.println(day);使用System.out.println(day[0])