Felix Riesterer: gleich und selbst

Beitrag lesen

Lieber Kiffer,

PHP kann ich nicht richtig.
string a = "Hase";
string b = "Hase";

würde dann a === b true ergeben?

was hat Dich daran gehindert, es auszuprobieren?

Obwohl a sicherlich in einem anderen Speicherbereich liegt als b? Und damit streng genommen nicht "der selbe" Wert ist?

Es ist derselbe Wert, aber nicht unter derselben Referenz. Intern mag PHP "optimieren" und tatsächlich für b einfach einen Zeiger auf den Inhalt von a setzen - aber das weiß ich nicht. Aus der Sicht der Programmlogik ist der a-Hase ein anderer als der b-Hase, aber sowohl der _Wert_ als auch der Datentyp ist identisch. Der === Operator wird true ergeben.

In Java -soweit ich mich erinnere- ist es so:

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

a == b wäre false, richtig?

Mit Java habe ich keinerlei Erfahrung, würde mich aber schwerstens wundern, wenn der == Operator tatsächlich false ergäbe. Es mögen vielleicht zwei unterschiedliche String-Objekte sein, ihre Werte sind aber identisch. Da der == Operator weniger streng prüft, sollte das Ergebnis true sein. Erst bei === wäre(!) es möglich, dass hier false entsteht - aber auch nur dann, wenn Java intern mit === auf "identisches Objekt" prüft, anstatt auf "Datentyp und Wert identisch".

Das "Problem" ist ja, dass Strings und Integer gerne mal als primitive Datentypen gehandhabt werden. Das führt dann dazu, dass auch eine strengere Überprüfung true ergibt.

Gegenbeispiel aus JavaScript:

var a = new Object();  
var b = new Object();  
  
// die folgenden beiden Zeilen bräuchte es nicht:  
a.name = "Hase";  
b.name = "Hase";  
  
alert(a == b); // false;

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)