Tech Stock logo Tech Stock

Java에서 많이 사용하는 형변환

아이군의 블로그 에서 퍼옴
이분도 나와같이 건망증이 심하신듯 ㅎㅎ 이분도 까먹기전에 퍼오셨네
저도 이어받아 퍼옵니다 추가로 업다운 캐스팅도 좀 정리

■ int를 String형으로  


String str = Integer.toString(i);

■ String형을 int로


int i = Integer.parseInt(str);


int i = Integer.valueOf(str).intValue();

■ double을 String형으로


String str = Double.toString(d);

■ long을 String형으로


String str = Long.toString(l);

■ float을 String형으로


String str = Float.toString(f);

■ String형을 double로


double d = Double.valueOf(str).doubleValue();

■ String형을 long으로


long l = Long.valueOf(str).longValue();
long l = Long.parseLong(str);

■ String형을 float으로


float f = Float.valueOf(str).floatValue();

■ decimal을 binary로


String binstr = Integer.toBinaryString(i);

■ decimal을 hexadecimal로


String hexstr = Integer.toString(i, 16);
String hexstr = Integer.toHexString(i);
Integer.toHexString( 0x10000 | i).substring(1).toUpperCase());

■ hexadecimal(String)을 int로


int i = Integer.valueOf("B8DA3", 16).intValue();
int i = Integer.parseInt("B8DA3", 16);

■ ASCII코드를 String형으로


String char = new Character((char)i).toString();

■ Integer형을 boolean으로


boolean b = (i != 0);

■ boolean 을 Integer형으로
음? 이건 삼항연산자 인듯?
괄호 안이 true이면 int i 는 1이 되고 false이면 int i 는 0이 되는~


int i = (b)? 1 : 0;


■ 업캐스팅 다운 캐스팅

  • 상위 클래스 = 상위 클래스
  • 하위 클래스 = 하위 클래스
  • 상위 클래스 = 하위 클래스
  • 하위 클래스 = (하위클래스형)상위 클래스

업캐스팅 코드로 보자


package codeplay;

class SuperClass {
	public void method1() {
		System.out.println("슈퍼 클래스의 메소드를 실행");
	}
}

class SubClass extends SuperClass {
	public void method2() {
		System.out.println("서브 클래스의 메소드를 실행");
	}
}

public class WhatisUpCasting {

	public static void main(String[] args) {

		SubClass sb = new SubClass();
		// SubClass의 메소드
		sb.method1();
		sb.method2();

		// 업케스팅(암묵적)
		SuperClass sc = sb;
		sc.method1();
		// sc.method2(); // 이렇게하면 컴파일 에러남
	}
}

슈퍼 클래스의 메소드를 실행 서브 클래스의 메소드를 실행 슈퍼 클래스의 메소드를 실행

업캐스팅에서 주의점 코드로 보자


package codeplay;

class SuperClass {
	int intField = 2;

	public int calc() {
		return intField * 5;
	}
}

class SubClass extends SuperClass {
	int intField = 3;

	public int calc() {
		return intField * 6;
	}
}

public class WhatisUpCasting {

	public static void main(String[] args) {

		SubClass sb = new SubClass();

		// (1)SubClassの필드 변수와 메소드
		System.out.println("sb필드변수:" + sb.intField);
		System.out.println("sb의calc:" + sb.calc());

		// (2)캐스팅 후의 필드변수와 메소드
		SuperClass sc = sb;
		System.out.println("sc필드변수:" + sc.intField);
		System.out.println("sc의calc:" + sc.calc());
	}
}


sb필드변수:3 sb의calc:18 sc필드변수:2 sc의calc:18

업캐스팅에서 같은 이름의 필드변수와 메소드가 있을경우
필드 변수는 상위 클래스를 우선으로 한다.
메소드는 하위 클래스를 우선으로 한다.

다운 캐스팅 코드로 보자


package codeplay;

class SuperClass {
	public void method1() {
		System.out.println("슈퍼클래스의 메소드를 실행");
	}
}

class SubClass extends SuperClass {
	public void method2() {
		System.out.println("서브클래스의 메소드를 실행");
	}
}

public class WhatIsDownCasting {

	public static void main(String[] args) {

		// 업캐스팅(암묵적)
		SuperClass sc = new SubClass();

		// 다운캐스팅(명시적)
		SubClass sb = (SubClass) sc;

		// SubClass의 메소드
		sb.method1();
		sb.method2();
	}
}

슈퍼클래스의 메소드를 실행 서브클래스의 메소드를 실행

다운캐스팅의 주의점 코드로 보자


package codeplay;

class SuperClass {
	public void method1() {
		System.out.println("슈퍼클래스의 메소드를 실행");
	}
}

class SubClass extends SuperClass {
	public void method2() {
		System.out.println("서브클래스의 메소드를 실행");
	}
}

public class WhatIsDownCasting {

	public static void main(String[] args) {

		// 업캐스팅(암묵적)
		SuperClass sc1 = new SubClass();

		// 다운캐스팅이 가능한지 확인
		if (sc1 instanceof SubClass) {
			// 다운캐스팅(명시적)
			SubClass sb1 = (SubClass) sc1;

			// SubClass의 메소드
			sb1.method1();
			sb1.method2();
		} else {
			System.out.println("sc1은 다운캐스팅 불가 입니다.");
		}

		SuperClass sc2 = new SuperClass();

		// 다운캐스팅 가능한지 확인
		if (sc2 instanceof SubClass) {
			// 다운캐스팅 (명시적)
			SubClass sb2 = (SubClass) sc2;

			// SubClass의 메소드
			sb2.method1();
			sb2.method2();
		} else {
			System.out.println("sc2는 다운캐스팅 불가 입니다.");
		}
	}
}

instanceof연산자로 다운캐스팅이 가능한지 확인
오브젝트가 지정한 클래스형 혹은 클래스를 상속받고 있는가 비교함.