String str="String"; if("String".toString() == str.toString()) System.out.println("Equal"); else System.out.println("Not Equal"); prints equal......why??? if("String".replace('g','G') == "String".replace('g','G')) System.out.println("Equal"); else System.out.println("Not Equal"); prints not equal.....why? if("String".replace('t','t') == "String".replace('t','t')) System.out.println("Equal"); else System.out.println("Not Equal"); prints equal.....why? thanks in advance
rajashree ghatak
Ranch Hand
Joined: Mar 10, 2001
Posts: 151
posted
0
in the first piece of code following takes place behind the scene: String str="String"; //creates a String object. When u use "String".toString(),no new object is being created,instead String pool is used.So both refer to the same instance of String.Hence == returns Equal. in the second piece of code: 2 new String objects are creatd that contain the modifications that take place because of replace operation of String.Hence == returns Not Equal. i am not sure of the third code.
lee dalais
Ranch Hand
Joined: Feb 28, 2001
Posts: 67
posted
0
hi mansoor this is what i think: 1. String str="String"; //gets put into a string pool str.toString() //returns 'String', but 'String' is already in string pool "String".toString() // returns 'String', but 'String' is already in string pool so they both have reference to the same string, so '==' returns true. 2.it seems that with this, both statements "String".replace('g','G') check the string pool and find that there is no matching string, so they both return different references. so unequal. if u said ("String".replace('g','G')).intern() to both it would return equal as they would both be put in the string pool but the strings are the same so they would both refer to onw string so same reference. 3.with this, both statements ("String".replace('t','t') check the string pool and find a matching string so they both return the same reference, so equal [This message has been edited by lee dalais (edited March 30, 2001).]