2011-07-23 129 views
0

在我看来,这if语句不起作用。java if语句错误

我在Java的新的,但是我知道C#和C++相当好,但我从来没有见过这样的事:

today=edit[0].substring(0,10); 
if (today == edit[0].substring(0,10)) 
{ 
    pars_prog.addView(name_prog[i]); 
} 

而且它不会进入IF功能?

Are if语句与Java(Android)不同吗?

+1

我不事这得到你的问题,但仍然是不好的做法,使用==那里的操作员如果(今天。equals(编辑[0] .substring(0,10)) – emory

+0

这不是'if'的工作方式不同,它是String对象(因此也是'==')。 '.equals()' – Nanne

+0

从你的编码我将你最好的编码器在这个宇宙.. – K6t

回答

4

当您使用==任何对象引用(不管是字符串或者任何其他非基本类型),它只是比较引用是否相等 - 即是否他们指的是完全相同的对象,或者它们是否都是null。

在这种情况下,您需要确定字符串是否为等于 - 即它们是否代表相同的字符序列。您应该使用该equals方法:

if (today.equals(edit[0].substring(0,10))) 

然而,一般做这个的时候你要小心的是,equals调用的目标就是非空的,否则你会得到一个NullPointerException

注意,C#是相似 - 除了将==操作者可以被重载,并重载string。如果操作数的编译时类型是不能同时string,你仍然会得到引用比较:

object text1 = new StringBuilder("hello").ToString(); 
object text2 = new StringBuilder("hello").ToString(); 
Console.WriteLine(text1 == text2); // False 
+0

谢谢你队友,这正是我一直在寻找的 – MBP

0

你有比较字符串时使用equals方法..现在你是比较参考,这就是为什么你从来没有进入if块

3

您正试图==比较字符串,这是身份比较 - 它将检查这两者是否是相同的实例(在JVM中)而不是比较它们的内容。

改为使用today.equals(..)

也就是说,如果出现您正在处理日期,那么String不是处理此问题的最佳方法。使用CalendarDate(有点过时)或乔达时间DateTime