aspose file tools*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Wrapper class and toString() Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Spring in Action this week in the Spring forum!
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Wrapper class and toString()" Watch "Wrapper class and toString()" New topic
Author

Wrapper class and toString()

Chun Wang
Ranch Hand

Joined: Jan 24, 2001
Posts: 42
Hello.
I have a question about the toString() method in the Wrapper class but I found this following section of code a little puzzling. can anyone help please?
//in the main method
Byte x1 = new Byte("127");
boolean b0 = x1.toString()==x1.toString();
System.out.println(b0);
Boolean b1 = new Boolean("true");
boolean b2 = b1.toString()==b1.toString();
System.out.println(b2);
//
when you run this, b0 will be false and b2 will be true. why? is there a difference between Byte and Boolean's toString() methods' return types or what? please help.
thanks a lot
cw
Son Le
Greenhorn

Joined: Jan 15, 2001
Posts: 21
Chun,
The only reason I can think of is the difference in how Boolean and other wrapper classes are implemented.
Here you're comparing the handles (==) of the String returned from the toString method. I'd guess that because for the Boolean class, the only 2 values they can return are either "true" or "false", it doesn't need to create a new String when the toString method is called, while the other wrapper classes do.

Class Boolean is similar to class A in their toString() methods: return literal String that is placed in the string pool and reused later.
Please look at the code above and let me know if you think I'm right.
Hungson Le
[This message has been edited by Son Le (edited January 24, 2001).]


-LHS
Chun Wang
Ranch Hand

Joined: Jan 24, 2001
Posts: 42
Hi, Hungson.
that was my guess too. I just wonder if anyone out there knows exactly what was happening. but yeah, I think Boolean's toString() is just different from all other Wrapper's toString().
thanks for your reply.
chun
Manfred Leonhardt
Ranch Hand

Joined: Jan 09, 2001
Posts: 1492
Hi all,
Wonder no more. Here is the code:

So from the above code, we can see that the Boolean toString will return a literal string which the compiler will place on the string stack while Byte will create new memory location.
Regards,
Manfred.
Son Le
Greenhorn

Joined: Jan 15, 2001
Posts: 21
Hi Manfred,
Thanks for your reply. I've been looking for more info about how certain Java API classes are implemented. I'd appreciate it if you can give me a link to those kinds of docs.
Thanks again,
Hungson Le
Yun Gao
Greenhorn

Joined: Jan 24, 2001
Posts: 1
Here is what the API(jdk1.2.2) says about <Boolean>toString():
---
Returns a String object representing this Boolean's value. If this object represents the value true, a string equal to "true" is returned. Otherwise, a string equal to "false" is returned.
---
1.
It seems like that 'equal to' means '=='.
2.
Running the following code
Boolean b1 = new Boolean("true");
System.out.println("Boolean b1 = new Boolean(\"true\");");
System.out.println("(b1.toString() == \"true\"): "
+ (b1.toString() == "true"));
results (under jdk1.2.2):
Boolean b1 = new Boolean("true");
(b1.toString() == "true"): true
3. A Java program uses a single String object for all ocurrences of the literal "true".

Jane Griscti
Ranch Hand

Joined: Aug 30, 2000
Posts: 3141
Hi Son,
If you want to see what the actual code for an API is you can do the following:
To extract source code for the Java Class files, check your JDK directory for a src.jar file. In the same directory, enter
jar tf src.jar > srcList.txt
This will create a text file listing all the .java files in the src.jar file. View the text file to locate the path name of the class you're interested in and then type:
jar xf src.jar file pathname

For example, to extract the Reader.java file
jar xf src.jar src/java/io/Reader.java
Hope that helps.
------------------
Jane Griscti
Sun Certified Java 2 Programmer
"When ideas fail, words come in very handy" -- Goethe


Jane Griscti
SCJP, Co-author Mike Meyers' Java 2 Certification Passport
Yoo-Jin Lee
Ranch Hand

Joined: Nov 01, 2000
Posts: 119
Hi,
An easy way to see the source code is to use an IDE. I like JBuilder 4. All you have to do is create any java class and have import statements at the top. To see java classes import java packages. JBuilder will automatically bring them into a screen into the lower left corner where you can navigate packages and choose the class you want to see. Then you just double click on it and look at the actual code.
You can get the free version at: http://www.borland.com/jbuilder/foundation/
cheerios,
Yoo-Jin.
mohammed mustafa
Greenhorn

Joined: Jan 11, 2001
Posts: 12
hi Jane,
can you explain me this, if two separate calls to x1.toString()is creating two different objects but i have checked their hashcodes and to my surprise they are same; how can two different objects have same hashcode
please explain....
mustafa
Jane Griscti
Ranch Hand

Joined: Aug 30, 2000
Posts: 3141
Hi Mohammed,
The <code>hashCode()</code> method in the String class overrides <code>Object.hashCode()</code>
The hash code of a String object is based on the contents of the String; any two strings with the same Unicode values will always return the same hash code even if they are in different Objects.
This is why you can get the same hash code for two different String objects.
Hope that helps.
------------------
Jane Griscti
Sun Certified Java 2 Programmer
"When ideas fail, words come in very handy" -- Goethe
[This message has been edited by Jane Griscti (edited January 25, 2001).]
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Wrapper class and toString()