Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does the toString method in java not seem to work for an array

I want to convert a character array to a string object using the toString() method in java. Here is a snippet of the test code I used:

import java.util.Arrays; class toString{     public static void main(String[] args){         char[] Array = {'a', 'b', 'c', 'd', 'e', 'f'};         System.out.println(Array.toString());         } } 

In principle, it should print abcdef, but it is printing random gibberish of the likes of [C@6e1408 or [C@e53108 each time the program executes. I don't need an alternative out of this but want to know why this is happening.

like image 358
sidharth sharma Avatar asked Aug 14 '11 22:08

sidharth sharma


People also ask

Does toString work on arrays?

Description. The Array object overrides the toString method of Object . The toString method of arrays calls join() internally, which joins the array and returns one string containing each array element separated by commas. If the join method is unavailable or is not a function, Object.

Does array have a toString method Java?

toString(int[]) method returns a string representation of the contents of the specified int array. The string representation consists of a list of the array's elements, enclosed in square brackets ("[]").

Why is toString not working?

You need to override toString() in the Node class. Show activity on this post. Your Node class does not override the toString() method and falls back to use the Object. toString() method instead.

How does the toString method work in Java?

A toString() is an in-built method in Java that returns the value given to it in string format. Hence, any object that this method is applied on, will then be returned as a string object.


2 Answers

To get a human-readable toString(), you must use Arrays.toString(), like this:

System.out.println(Arrays.toString(Array)); 

Java's toString() for an array is to print [, followed by a character representing the type of the array's elements (in your case C for char), followed by @ then the "identity hash code" of the array (think of it like you would a "memory address").

This sad state of affairs is generally considered as a "mistake" with java.

See this answer for a list of other "mistakes".

like image 179
Bohemian Avatar answered Sep 19 '22 23:09

Bohemian


I don't know where you get the idea that "in principle" it should print "abcdef". Where is that documented?

Something like [C@6e1408 is certainly not random gibberish - it's the same way of constructing a string from an object as any other type that doesn't override toString() inherits - it's a representation of the type ([ indicating an array; C indicating the char primitive type) followed by the identity hash code in hex. See the documentation for Object.toString() for details. As it happens, arrays don't override toString.

If you want [a, b, c, d, e, f] you can use Arrays.toString(char[]). If you want abcdef you can use new String(char[]).

like image 22
Jon Skeet Avatar answered Sep 22 '22 23:09

Jon Skeet