Re: noob question: string comparing
David Segall wrote On 07/31/06 12:20,:
[...]
I don't dispute your two concepts of equality but you have used
sleight of hand to claim my wallet.
Sleight of hand, prestidigitation, trickery and ruses,
scams and frauds -- if I can grab other peoples' wallets,
it's all worth while! ;-)
I have no objection to being
forced to explicitly compare wallet.colour, wallet.size etc in
addition to wallet.value to protect my wallet. Java confuses beginners
because it assigns a default property (.value) to a String object in
the equals() method but omits that property and insists on using the
unfamiliar concept of "identity" with the == operator.
I'm not at all sure what you mean by a "default" property.
The String.equals() method makes a computation, just as other
equals() methods -- other anything() methods -- make their
computations. String.equals() takes one set of things into
account; BigInteger.equals() computes things differently;
neither seems (to me) to "default" to anything.
This contrasts
with most (all?) other languages
Here I must disagree, although it's risky: I've used only
a couple dozen programming languages, well short of "most."
But among those I've used that support the notion of "reference"
as a first-class value, I cannot think of any that make Java
seem at all unusual in this regard. All of them made a clear
distinction between the reference and the thing referred to.
In C, consider
char *p = "Hello, world!";
char *q = malloc(strlen(p) + 1); /* assume success */
strcpy (q, p);
This fragment points p at a character string, then points q
at an exact copy of that string. At this point p and q are
not == because they point to different string instances, yet
strcmp(p, q) reports that the strings compare equal. This
should seem eerily similar to Java's behavior with
String p = "Hello, world!";
String q = new String(p);
And if you find two notions of "equality" confusing, it's
a good thing you never encountered Lisp! My Lisp days are far
behind me and my memory of them has gone a bit foggy, but I
recall that Common Lisp supports at least four different notions
of equality, maybe five.
which is why I concluded that it was
done for the benefit of the interpreter programmer rather than the
application programmer.
I don't think the conclusion follows from the premise.
--
Eric.Sosman@sun.com