Por qué es eso
println(Int.MIN_VALUE + " " + Int.MAX_VALUE)arroja un error, mientras que
println("" + Int.MIN_VALUE + " " + Int.MAX_VALUE)¿no es?
Como se menciona en los comentarios, sus dos declaraciones llaman a diferentes funciones más. La función más es una función de operador binario , lo que significa que se puede llamar utilizando la notación infija a + b . Esto llamará a la función de operador en a , con b como argumento. En tu ejemplo, esto significa que
"" + Int.MIN_VALUE llama al plus definido por String que tiene String.plus(other: Any?) como su firma de método. Como se menciona en la documentación, es
Devuelve una cadena obtenida al concatenar esta cadena con la representación de cadena del otro objeto dado.
Esto significa que obtendrá la representación String de Int.MIN_VALUE llamando al método toString() .
Por otro lado,
Int.MIN_VALUE + "" llama al plus definido por Int que limita el tipo de su argumento y no se puede aplicar a un String y, por lo tanto, Kotlin arrojará un error.
Como comentario adicional, probablemente debería usar plantillas de cadena de todos modos:
"${Int.MIN_VALUE} ${Int.MAX_VALUE}"