English 中文(简体)
= on的“强权”没有预期。 [复制]
原标题:== on String in Java not as expected? [duplicate]
  • 时间:2010-11-23 19:00:59
  •  标签:
  • java
  • string
This question already has answers here:
Closed 12 years ago.

Possible Duplicate:
String equality vs equality of location

我仅谈一下我第一次评估课程,标值为97.14%,评论“在比较你需要使用的“......平等”方法时,你不会去做你可能期望的工作”。

如何? 如果是这样的话,那么为什么我的测验都是正确进行的?

最佳回答

You got lucky.“=”比较了这两个物体,看它们所指的记忆。 它与实际扼杀无关。

如下文评论所述,如果你重新比较两个示意图,它们可能(将)在同一记忆点结束。 So

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

在此情况下,<代码>(a = b)将予回复。 但是,如果你把他们带进不同的记忆地点,

String a = new String("abc");
String b = new String("abc");

然后(a = b)将不再有效。

问题回答

基本上,=比较了您的两个变量是否相同。 对大多数细致的比较,这只会巧合。

它的根源是,有两种平等:参考和价值。

http://leepoint.net/notes-java/data/expressions/22compareobjects.html

<代码>=的操作者,如果 Java按参考而不是按价值比较。 更正确的是,它比较了两个按价值列出的参考资料,但没有按内容对参考物体进行比较。

See this article for moreread.

class test{
public static void main(String[] args)
{
String a =new String("ABC");
String b =new String("ABC");
System.out.println(a==b); //prints False
System.out.println(a.equals(b)); //prints true
}
}

这不仅关系到扼杀,而且关系到所有物体。 操作人 = 比较参考文献,而同等()方法应当比较物体内容。 仅限

BTW也与其他语言有关。 java语中的参照点类似C. 因此,同样的比较规则也适用于C。

你是幸运的。 页: 1 最大27分:

在 Java,有两种不同类型:原始和物体参考资料。

Primitives include integers,rots等, = 工作如你预期。 在提到物体时,当你使用==时,它检验提及点是否相同,而不是这些参考点所指的物体是否相同。

努力不是原始的,而是目标;因此=将测试参考平等。 你们需要测试平等的方法,以便从目标价值的角度检验平等。

如你所知, Java不是这一意义上的纯目标语言,你有的变量不是物体。 例如,由于分类是原始的,他们没有办法,因此你可以做像<代码>3.add(4)<>>。 但是,有时,你们需要把物体从愤怒中排出来,即象Integer这样的包装类别。 在某些情况下,转换是自动的,称为auto Box。 例如,当你向ArrayList放电时,自ArrayList只接受物体后,自动箱子转换为物体;这种转换必须在Java 5之前手工进行。

以下是解释差异的最佳方式:

String a = new String("foo");
String b = new String("foo");

if(a == b) {
  // Does not execute
}

if(a.equals(b)) {
  // Executes
}

// Now make a reference the same memory location as b
a = b;

if(a == b && a.equals(b)) {
  // Executes
}

由于这是你的第一个任务,我毫不奇怪,你没有获得这一权利。 许多人在重新开始学习以制定法典时,就走了。 以这种方式思考......

“=”在比较“EXACT”同一件事时是真实的。 你们的父亲的名字是博博。 当你叫他“父亲”或他人叫他“Bob”时,你会重复提及同一人。 这就是[So Bob=父亲]使用的“=”。

当你重新比较类似目标时,“平等”即属实。 因此,如果你刚刚购买了2008年《Honda协议》,而你的朋友刚刚购买了2008年《Honda协议》,你会说,你都有SAME汽车。 即便如此,这些车辆也不是“EXACT”相同的汽车[So You Car. Equals(yourFriends Car)]。 但是,这差别很大,因为正是方案制定者才决定什么使两个目标相同。

=比较了物体参考资料,如果两个物体指同一实际记忆地点,该编号即告复。

。 物体类别仅限=,但通常优先于测试两种物体是否具有相同的内容。

对于“强硬”类,由于汇编者(可能还有联合核查机制)一般会试图确保分配相同字面直面价值的两个“强硬”提法指同一个强硬物。

因此:

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

System.out.println(a == b);  // usually "true"

以上编码通常印刷“真实”,因为汇编者只储存一个xxx> 字面和ab。 如果在完全分开的班级中界定<代码>a和b,但现在的I m guessing,甚至可能如此。





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...