본문 바로가기
기초JAVA

변수 타입변환

by 현닝이 2022. 7. 7.

<타입변환>

-타입 변환 : 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말함

ex)  byte a = 10;   // byte 타입 변수 a에 10을 저장

       int b = a;        //byte 타입 변수 a에 저장된 10을 int 타입 변수 b에 복사해서 저장

      -> 원래 10은 byte타입의 값이었으나,복사해서 저장할 때 int 타입의 값으로 변환된 것 -> 이걸 타입변환이라고 함

 

<자동 타입변환>

기본 타입 허용 범위 크기순

byte<short<int<long<float<double

 

프로그램 실행 도중에 자동으로 타입 변환이 일어나는 것을 의미

허용 범위가 작은 타입이 허용범위가 큰 타 입으로 저장 될 때 발생함 

 ex) 큰 허용범위 타입 = 작은 허용범위 타입

      byte byteValue = 10;

      int intValue = byteValue;    // 자동 타입 변환됨

 

정수타입이 실수 타입으로 저장 된 경우 무조건 자동 타입변환 일어남

실수타입은 정수 타입보다 허용범위가 더 크기 때문

ex) long longValue = 5000000000L;

     float floatValue = longValue;    //5.0E9f로 저장됨

   double doubleValue = longValue;  // 5.0E9로 저장됨

 

*char 타입의 경우 int타입으로 자동 타입변환되면 유니코드 값이 int 타입에 저장됨

ex) char charValue = ‘A’;

      int intValue = charValue;     //65가 저장됨

 

*char타입보다 허용 범위가 작은 byte타입은 char타입으로 자동 타입변환 될 수 x

왜냐면? char타입의 허용범위는 음수 포함x  / byte타입은 음수를 포함

ex) byte byteValue = 65;

      char charValue = byteValue;   <- 컴파일 에러 발생됨

package chapter02;
public class promotionexample {
public static void main(String[] args) {
	//자동 타입변환
	byte bytevalue = 10;
	int intValue = bytevalue;
	System.out.println("intvalue:"+intValue);
	
	char charValue = '가';
	intValue = charValue;
	System.out.println("가의 유니코드:"+ intValue);
    intValue = 50;
	long longValue = intValue;
	System.out.println("longValue:"+longValue);

	longValue = 100;
	float floatValue = longValue;
	System.out.println("floatValue:" + floatValue);
	
	floatValue = 100.5f;
	double doubleValue = floatValue;
	System.out.println("doubleValue:"+ doubleValue);
}
}

<강제 타입변환>

큰 허용 범위 타입은 -> 작은 허용 범위 타입으로 자동 타입변환 될 수 x

큰 허용범위 타입을 작은 허용 범위 타입으로 강제로 나눠서 저장 하는 것을 강제 타입변환 (캐스팅 :casting) 이라고 함

강제타입 변환은  () 사용 , 괄호 안에 들어가는 타입은 나누는 단위

작은 허용 범위 타입 = (작은 허용 범위 타입)큰 허용 범위 타입

 

*int타입은 byte타입보다 더 큰 허용 범위를 가지기 때문에 자동 변환 x 

(char)캐스팅 연산자 사용하여 char타입으로 강제 변환 -> char타입으로 강제변환 하는 이유는 = 문자를 출력할 수 있기 때문

ex) int intValue = 65;

char charValue = (char)intValue;

System.out.println(charValue);        // A가 출력됨

 

실수 타입(float, double)은 정수타입 (byte,short,int,long)으로 자동 변환되지 x 때문에 강제 타입변환을 사용해야함

이경우 소수점 이하 부분은 버려지고 정수 부분만 저장됨

ex) double doubleValue = 3.14;

     int intValue = (int) doubleValue;    // intValue 는 정수 부분인 3만 저장

package chapter02;
public class CastingExample {
public static void main(String[] args) {
	int intValue = 44032;
	char charValue = (char)intValue;
	System.out.println(charValue);
	
long longValue = 500;
	intValue = (int)longValue;
	System.out.println(intValue);
	
	double doubleValue = 3.14;
	intValue = (int)doubleValue;
	System.out.println(intValue);
} 
}

<연산식에서 자동타입변환>

package chapter02;

public class Operationpromotionexample {
public static void main(String[] args) {
	byte byteValue1 = 10;
	byte byteValue2 = 20;
	//byte byteValue3 = byteValue1 + byteValue2;
	int intValue1 = byteValue1 + byteValue2;
	System.out.println(intValue1);
	
	char charValue1 = 'A';
	char charValue2 = 1;
	//char charValue3 = charValue1 + charValue2;
	int intValue2 = charValue1 + charValue2;
	System.out.println("유니코드=" + intValue2);
	System.out.println("출력문자="+(char)intValue2);

<연산에서의 문자열 자동 타입변환>

자바에서 + 연산자는 두가지 기능

1.피연산자가 모두 숫자일 경우 덧셈 연산 수행

*숫자+숫자 -> 덧셈연산 -> 숫자

int value = 3+7; -> int value = 10;

 

2.피연산자 중 하나가 문자열일 경우 나머지 

피연산자도 문자열로 자동 변환되어 -> 문자열 결합 연산 수행

*”문자열” + 숫자 -> “문자열” +”숫자”->결합연산 ->”문자열숫자”

string str = “3”+7; -> string str= “3+7”; -> string str = “37”

*숫자+”문자열”-> “숫자”+”문자열”->결합연산->”숫자문자열”

string str= 3+”7”; -> string str= “3”+”7”; -> string str= “37”

 ------>   어느한쪽이 문자로 되어있으면 문자열로 됨

 

연산식에서 +연산자가 연속으로 나오면 

순차적으로 +연산 수행

먼저 수행된 덧셈연산 결과를 가지고 그다음 +연산 수행

int value= 1+2+3; -> int value =3+3; -> int value= 6;

string str = 1+2+”3”; -> string str = 3+”3”; -> String str “33”

String str= 1+”2”+3; -> String str=”12”+3 -> “123”

String str=”1”+2+3; -> String str”12”+3 -> String str= “123”;

 

–앞에서 부터 순차적으로 +하지않고 우선연산 원하면 해당부분()

String str= “1”+(2+3); -> String str=”1” +5 -> String str= 15;

 

<문자열 결합 연산>

public static void main(String[] args) {
	//숫자 연산
	int value = 10 + 2 + 8;
	System.out.println("value:"+value);
	//문자열 결합 연산
	String str1 = 10 +2+"8";
	System.out.println("str1:"+str1);
	String str2 = 10+"2"+8;
	System.out.println("str2:"+ str2);
	String str3 = "10"+2+8;
	System.out.println("str3:"+ str3);
	String str4 = "10"+ (2+8);
System.out.println("str4:"+ str4);		
}
}

<문자열 기본타입 강제 타입 변환>

public static void main(String[] args) {
	int value1 = Integer.parseInt("10");
	double value2 = Double.parseDouble("3.14");
	boolean value3 = Boolean.parseBoolean("true");
	System.out.println("value1:"+ value1);
	System.out.println("value2:"+ value2);
	System.out.println("value3:"+ value3);
	
	String str1 = String.valueOf(10);
	String str2 = String.valueOf(3.14);
	String str3 = String.valueOf(true);
	
	System.out.println("str1:" + str1);
	System.out.println("str2:" + str2);
	System.out.println("str3:" + str3);
	}
}

'기초JAVA' 카테고리의 다른 글

Scanner  (0) 2022.07.07
문자열  (0) 2022.07.07
변수  (0) 2022.07.04