Lesson 6. 형변환
형변환이 필요한 이유? double myDouble = 33.3; int result; ... result = myDouble * 3; 99.9 소숫점 이하 0.9 손실
자동 형변환(프로모션) short myShort = 200; byte(8) byte myByte= 20; int myInt = myShort + myByte; byte(8) short/char(16) int(32) long(64) float(32) double(64) 형변환 필요 자동 형변환 short형 byte형 int형 (저장)
자바의 형변환 캐스팅 랩퍼 클래스 기본 데이터형 간의 형변환 (예) int 값을 char에 저장하는 경우 기본 데이터형과 레퍼런스 데이터형 간의 형변환 (기본 데이터형 간에도 물론 사용 가능하지만 캐스팅이 더 편하기 때문에 잘 사용되지 않음) (예) String형 문자열을 int에 저장하는 경우
캐스팅 int myInt = (int) 12.34; 바꾸고 싶은 데이터형(=의 왼쪽)을 괄호로 감싸서 표시 현재 데이터형(=의 오른쪽)이 아님 double
랩퍼 클래스의 종류 String은 랩퍼 클래스가 아니지만 함께 쓰는 경우가 많음
랩퍼 클래스의 메소드 byte byteValue() short shortValue() int intValue() Integer 클래스 (랩퍼 클래스) byte short int long float double String byteValue() shortValue() intValue() longValue() floatValue() doubleValue() toString()
랩퍼 클래스 사용법 관련된 랩퍼 클래스 객체 생성 랩퍼 클래스에 내장된 형변환 메소드를 사용해서 원하는 데이터형으로 변환 int myInt = 10; 관련된 랩퍼 클래스 객체 생성 Integer wrap = new Integer(myInt); 랩퍼 클래스에 내장된 형변환 메소드를 사용해서 원하는 데이터형으로 변환 byte myByte = wrap.byteValue(); short myShort = wrap.shortValue(); int myInt = wrap.intValue(); long myLong = wrap.longValue(); float myFloat = wrap.floatValue(); double myDouble = wrap.doubleValue(); String myString = wrap.toString();
랩퍼 클래스 연습 float형 String형 String형 int형 float myFloat = 12.34F; Float wrap = new Float(myFloat); // float형Float형 String myString = wrap.toString(); // Float형String형 String형 int형 String myString = "4225"; Integer wrap = Integer.valueOf(myString); // String형Integer형 int myInt = wrap.intValue(); // Integer형int형
랩퍼 클래스의 비교 Integer x = new Integer(200); Integer y = new Integer(200); == 연산자 x == y false equals() 메소드 x.equals(y) true
Character 클래스 1 : public class MyCharacter 2 : { 3 : public static void main(String[] args) 4 : { 5 : char[] arr = {'T', 'o', 'n', 'G', '?', ' ', '2', '0', '0', '3', '!'}; 6 : 7 : for(int i=0; i<arr.length; i++) 8 : { 9 : if(Character.isDigit(arr[i])){ 10 : System.out.println(arr[i] +"는 숫자입니다."); 11 : }else if(Character.isWhitespace(arr[i])){ 12 : System.out.println(arr[i] +"는 스페이스입니다."); 13 : }else if(Character.isUpperCase(arr[i])){ 14 : System.out.println(arr[i] +"는 대문자입니다."); 15 : }else if(Character.isLowerCase(arr[i])){ 16 : System.out.println(arr[i] +"는 소문자입니다."); ...
진법을 고려한 형변환 진법을 생략하면 10진수가 디폴트 (예) parseInt(num) 1 : public class Radix 2 : { 3 : public static void main(String[] args) 4 : { 5 : String num= "11"; 6 : 7 : try{ 8 : 9 : int bin= Integer.parseInt(num, 2); // 2진수 11로 봤을 때 10 : int oct= Integer.parseInt(num, 8); // 8진수 11로 봤을 때 11 : int dec= Integer.parseInt(num, 10); // 10진수 11로 봤을 때 12 : int hex= Integer.parseInt(num, 16); // 16진수 11로 봤을 때 ... 20 : }catch(NumberFormatException e){ 21 : System.out.println("ERROR: "+ e); 22 : }