所以,我已经购买了第4版书“傻瓜的Java”,我必须说,这可能是最好的30块钱,我曾经在一本书中度过。我不是新的编码,我其实在它相当不错,如果我这样说自己。

不过,我遇到的代码行有我困惑触摸:

public void setName(String n)
{
     if(!n.equals(""))
     {
          name = n;
     }
}

我的问题出现在第三行中,如果部分...我知道了如果循环工作(即:如果(这是==){做的东西})(n.equals(“”)!),但我从来没见过的!n.equals(“”)之前成立。任何人都可以请解释一下?

PS:只是为了在猜测扔。是一样的:

public void setName(String n)
{
     if(n != "")
     {
          name = n
     }
}

我觉得这只是一个方式,以确保如果用户没有输入一个名称(即myAccount.setName =“”;)。它不会踢回错误,运行像正常的,但我没“T确定。

在此先感谢您的帮助!

编辑:改变了我 “myAccount.name = ”“;”为 “myAccount.setName = ”“;”,遗憾的混乱

感谢您:转到亚萨,欣赏的答案!同卢卡斯土豚,他回答为好,但亚萨首先回答我的核查意见在了自己的答案,感谢大家!

有帮助吗?

解决方案

if(!n.equals(""))
{
     name = n;
}

意味着,如果n不是一个空字符串,并将其值指定到名称。

在Java中,每一个对象具有一等于(对象o)方法来测试与另一个Object平等。 ==操作符通常用于比较的图元。它也可以用来比较的对象为“雷同”。即。两个对象实际上是同一个实例。这是在方便恒定类型如字符串和所有的基本数据类型,如整数和长对象包装。

其他提示

在Java中,字符串是不可变但不实习,所以  如果(“” == N)可能会或可能不会是另一个字符串真 对于其中 “” .equals(n)为真。

仅仅是用来迷惑你更多,这是不好的代码,它会得到一个NullPointerException 如果调用使用null作为参数。应当写成 “” .equals(n)的

()方法比较两个串的内容的平等。该==和!=运算符告诉你两个String对象是否是同一对象或没有。两个不同的字符串以相同的内容,因此equals()方法给对方,仍可能!=到彼此。即使字符串是不可变的,它有助于通过想象字符串是可变的理解上的差异,然后等于()的意思是“是目前相同的”和==是指“将始终是相同的。”

除非你确定两个字符串的在安全规则是始终使用equals()方法http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ String.html#实习生%28%29" 相对= “nofollow noreferrer”>实习。引用:

  

由此可见,对于任何两个串组S   和t s.intern()== t.intern()是   当且仅当s.equals(t)是   真。

     

所有文字串和字符串值的   常数表达式实习。

考虑这样的:

String a="";
String b="";

a和b都为字符串对象,每个都有其自己的存储器分配,因此唯一的地址。 a和b是在不同的地址。当编码的布尔表达式

a == b

你是比较地址的对象,而不是它们的内容。为了比较 内容必须使用字符串对象的equals()方法

的对象具有在存储器中的物理位置,这是为每个对象唯一 - 没有两个不同的对象可以具有相同存储器地址 - 和它的内容或值。 ==操作符比较对象的地址;当你B你是问如果A和B是同一对象别名的名称编码一个== - 做a和b指向同一个物理位置。 a.equals(b)中询问如果两个对象,无论他们在哪里,具有相同的值。

这是由编译器有些复杂“实习”,其中编译器可以在编译时检测到两个常数具有相同的值并且重复使用相同的对象,但是这将不会是在运行时创建的值真

该方法equals()将返回其中指出,在对象被传递一个boolean值是“等于”发出调用的对象。这“等于”方法可以在类中重写,使自己的测试。在String的情况下,测试是原始字符串的值是否相同的对象的字符串表示的值在被传递。

作为它返回一个布尔值,可以用一个!否定的值,所以测试是'是方法的参数不是空字符串?是?然后将其分配给我们的name变量。

==将始终测试是否在左侧的对象相同右边的对象,因为它比较的引用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top