'How does Groovy translate from char[] to String within a GString?

I'm trying to figure out how Groovy translates a char[] to a String within a GString.

Example:

char[] pchar = ['p', 'a', 's', 's']
println "$pchar"

Result:

pass

At first I assumed it would use the toString() method on char[] (http://groovy.codehaus.org/groovy-jdk/primitive-types/char[].html#toString()). But the results of running the following code seems to suggest otherwise:

char[] pchar = ['p', 'a', 's', 's']
println "$pchar"

pchar.class.metaClass.toString = {->
    "****"
}

println pchar.toString()
println "$pchar"

Result:

pass

****

pass

I've also tried overriding invokeMethod() to try figuring it out to no avail:

char[] pchar = ['p', 'a', 's', 's']
println "$pchar"

pchar.class.metaClass.toString = {->
    "****"
}
pchar.class.metaClass.invokeMethod = {String methodName, Object arguments ->
    println("Method called on ${delegate.class}: $methodName, $arguments")
    def metaMethod = delegate.metaClass.getMetaMethod(methodName)
    return metaMethod.invoke(delegate, arguments)
}

println pchar.toString()
println "$pchar"

Result:

pass

Method called on class [C: toString, []

****

pass

Does anyone know how Groovy does this transformation?



Solution 1:[1]

char[] pchar = ['p', 'a', 's', 's']
assert pchar.join() == 'pass'
println "${pchar.join()}"

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jose Quijada