This week's book giveaway is in the Agile and other Processes forum. We're giving away four copies of The Mikado Method and have Ola Ellnestam and Daniel Brolund on-line! See this thread for details.
hi Please read the foll..what will be the o/p..i am a little confused ----- 1) class qq { public static void main(String as[]) { if("String".toString() == "String") System.out.println("Equal"); else System.out.println("Not Equal");
------------------------------ 3) if("String".replace('g','G') == "String".replace('g','G')) System.out.println("Equal"); else System.out.println("Not Equal"); -------------------- In the above examples --- 1) is printing "Equal" 2) In this case its printing "Not Equal" 3)In this case its printing "Not Equal" But The == sign checks if the 2 references r referring to the same object..right? My question is Where r the objects created and how does the examples actually work? Does "String" has to do anything with it??? Will somebody explain.. Thanks ia advance Preyas.
Sunitha Sounderrajan
Ranch Hand
Joined: Sep 12, 2000
Posts: 36
posted
0
hello Preyas, replace(oldchar, newchar) --> returns a new string, generated by replacing every occurance of oldchar with newchar. If there is nothing to replace then the returned string is NOT a new string. it returns the same string. No new string is returned. For Example-1. if ("sample".replace('s', 'S') == "Sample") System.out.println("No new Strings returned"); else System.out.println("New Strings returned"); In Example-1 displays "New Strings returned". Example-2. if ("Sample".replace('s', 'S') == "Sample") System.out.println("No new Strings returned"); else System.out.println("New Strings returned"); In Example-2 displays "No new Strings returned". In case of trim() the same rules holds good. if (" Sample ".trim() == "Sample") System.out.println("No new Strings"); else System.out.println("New Strings");
--> displays "New Strings" if ("Sample".trim() == "Sample") System.out.println("No new Strings"); else System.out.println("New Strings"); --> displays "No new Strings"
Hope this helps. Sunitha. S
[This message has been edited by Sunitha Sounderrajan (edited October 21, 2000).]
P SOLAIAPPAN
Ranch Hand
Joined: Oct 20, 2000
Posts: 68
posted
0
Hi, Let me explaint some fundas about "==" , equals()
You can use "==" only for primitive value comparision not for Object comparision. If you still use it for object comparision it will try to compare the contents of object references which are nothing but addresses. String str1=new String("Hello"); // str1 is an address String str2=new String("Hello"); // str2 is another address // i.e str1 != str2
String object is formed using 2 methods
(a) usual method using "new" operator ,
String str1=new String("Hello");
(b) Using String literals String str2="Hello";
(Here String pool concept is used where even if you create any number of Strings having same literals"Hello" all objects will point to the same address, only one literal "Hello" will be stored in memory loation. No duplication is allowed inside a string pool. All strings using above method will be stored only in string pools)
if (str1==str2 ) System.out.println("Equal"); else System.out.println("Not Equal"); //will print "Not Equal" // here addresses are different
So always use equals() method of Object class for comparing objects. euals() method will not compare the addresses but compares the contents stored in addresses pointed by the reference. if (str1.equals(str2) ) System.out.println("Equal"); //will print "Equal" else System.out.println("Not Equal");
Now let me come to u r problem
(i) "String".toString() this simply returns string literal"String" both addresses are same It is equivalent to say that "String"=="String" which is always Equal(true).
(ii)" String ".trim() == "String" // Not Equal, diffrent addresses
"String" it is created in string pool address is returned. " String ".trim() - Since Strings are immutable a new String object will be created which is not in string pool here different address is returned
(iii) "String".replace('g','G') == "String".replace('g','G') Again same "immutable" as above
Try the following:
if(" String ".trim().equals( "String")) System.out.println("Equal"); // prints equal
if("String".replace('g','G') .equals( "String".replace('g','G'))) System.out.println("Equal"); // prints equal