형변환에는 두 가지 방법이 있습니다: 명시적 형변환(explicit casting)과 암시적 형변환(implicit casting)입니다.
명시적 형변환은 개발자가 형변환을 명시적으로 지정하는 것을 말합니다. 이는 변환되는 데이터 타입의 범위를 포함하는 타입으로만 형변환이 가능합니다. 예를 들어, int 타입의 변수를 byte 타입으로 형변환하려면 다음과 같이 작성할 수 있습니다:
int intValue = 10;
byte byteValue = (byte) intValue;
여기서 (byte)는 int 값을 byte로 형변환하는 것을 나타냅니다. 그러나 이러한 형변환은 데이터의 손실이 발생할 수 있으므로 주의해야 합니다. 예를 들어, int 변수에 큰 숫자가 저장되어 있는 경우 byte로 형변환하면 데이터의 일부가 손실될 수 있습니다.
암시적 형변환은 더 작은 데이터 타입에서 더 큰 데이터 타입으로 형변환하는 것을 말합니다. 예를 들어, int 변수를 long 변수에 할당할 때는 명시적 형변환을 사용하지 않아도 됩니다:
int intValue = 10;
long longValue = intValue;
이것은 int 값을 long으로 암시적으로 형변환하는 것을 나타냅니다.
이제 int형 변수인 'no'가 있을 때, 'no'를 (String)(no)와 같이 형변환하려고 할 때, 이는 명시적 형변환이며, 형변환을 할 수 있는 타입으로 제한되기 때문에 컴파일 에러가 발생합니다. 'no'의 반환 타입이 String이 아니기 때문입니다. Java에서는 일반적으로 기본 데이터 타입 간의 형변환이 제한되어 있습니다. int와 String은 서로 다른 데이터 타입이기 때문에 직접적인 형변환이 불가능합니다. 따라서 컴파일러는 int를 String으로의 명시적 형변환을 허용하지 않습니다. 이는 Java 언어의 타입 시스템에서 정의된 규칙입니다.
반면에 no+""와 같이 String과 다른 타입(여기서는 int)을 + 연산자로 결합하는 경우, Java는 암시적으로 int 값을 String으로 변환하여 문자열 연결을 수행합니다. 이는 Java에서 문자열 연산을 수행할 때 편리한 기능입니다.
즉, no+""는 int 값을 String으로 암시적으로 형변환하여 문자열로 결합하는 것을 나타내므로 정상적으로 작동합니다.
int를 String으로 변환하려면 다른 방법을 사용해야 합니다. 여러 가지 방법이 있지만, 가장 흔한 방법은 Integer.toString() 메서드를 사용하는 것입니다. 이 메서드는 int 값을 String으로 변환하여 반환합니다. 예를 들어:
int No = 1(아무 정수값);
String NoString = Integer.toString(No);
또는 Java 5부터는 String.valueOf() 메서드를 사용하여 다양한 데이터 타입을 문자열로 변환할 수도 있습니다. 예를 들어:
int No = 1(아무 정수값);
String NoString = String.valueOf(No);
이렇게 하면 int 값을 String으로 변환할 수 있습니다.
no+""의 값이 문자열이 되는 이유는 문자열 결합과정에서 'no'가 Integer.toString()나 String.valueOf()와 같은 내장 메서드에 의해 암시적으로 문자열로 형변환이 되기 때문입니다.
Integer.toString() 메서드와 String.valueOf() 메서드는 Java의 내장 클래스인 java.lang.Integer와 java.lang.String에 기본적으로 제공되는 정적 메서드입니다. 따라서 Java 프로그램 어디에서든지 사용할 수 있습니다.
java.lang.Integer 클래스는 Java에서 정수형을 다루는 데 사용되며, java.lang.String 클래스는 문자열을 다루는 데 사용됩니다. 이러한 클래스는 Java의 핵심 라이브러리인 java.lang 패키지에 포함되어 있으며, 자바 프로그램을 작성할 때 자동으로 임포트되기 때문에 별도로 임포트하지 않아도 사용할 수 있습니다.
따라서, Integer.toString() 또는 String.valueOf() 메서드를 사용하려면 별도의 라이브러리를 추가로 가져오거나 임포트할 필요 없이, Java 프로그램의 어느 곳에서나 사용할 수 있습니다.