컴퓨터프로그래밍/JAVA

데이터 타입, 문자열 형변환

zelkova 2016. 4. 17. 12:36

 <목차로 돌아가기>


  형변환(Type Casting)이란?


형변환이란 값의 자료형을 원하는 자료형으로 변환하는 작업을 말한다.

형변환에는 JVM이 판단해서 행하는 자동 형변환과 

프로그래머가 의도적으로 일으키는 명시적 형변환이 있다.


  자동 형변환(Up-Casting)

자바는 자료형의 적용에 엄격한 편이다.

int a = 300

long money = a; 

위 코드는 long형 변수 money에 int형 값 300을 할당하려 한다. 


long형 변수 money에 저장되는 값은 long형이여야 한다. 이 경우 JVM은 할당하기 전에 300을 long형으로 자동으로 변환한다. 


자동 형변환은, 작은 자료형에서 큰 자료형 방향으로 변환이 일어나므로, Up-Casting이라 한다.

byte --> short --> int --> long --> float --> double

long --> float 방향에 주목하자. 비록 float이 4바이트 영역의 메모리를 차지하지만 실수이므로 long에서 float으로 자동 형변환된다. 


다음 예를 보자.

float x = 10L;

JVM은 long형 값 10을 float형의 값 10으로 자동 형변환시킨다.


int x = 10; 

int y = 4; 

int z = x / y;

z에는 2.5가 아니라 2가 할당된다.

이유는 x와 y가 모두 int형 값이므로 연산 결과 역시 int형이여야 하기 때문이다.


int x = 3 + 3.5 + 4; 

컴파일 에러!

3.5는 double형 값이고, 3과 4는 int형 값이다.

int를 포함하여 자료형이 int 이상의 값들이 참여하는 산술 연산에서는 값들 중 가장 큰 자료형으로 나머지 값들의 자료형이 변환된다. 따라서 위 코드에서 3과 4는 연산이 실행되기 전에 double형으로 변환된다.



  명시적 형변환(Down-Casting)

float f = 1.1; //컴파일 에러!

변수에 값을 대입할 때 값의 자료형이 변수의 자료형보다 크면 컴파일 에러가 발생한다.

다음 코드는 double형 값의 자료형을 float형으로 의도적으로 바꾸는 코드이다.

float f = (float) 1.1;


다음 예를 보자.

byte b = (byte) 258; 

b엔 2가 할당된다.



int x = 10; 

int y = 4; 

double z = x / y;

z가 2.5가 되려면 연산에 참여하는 x 나 y를 double로 명시적 형변환한다.

double z = (double) x / y; 

또는

double z = x / (double) y; 



  문자열 String 클래스 관련 


자바 프로그램에서 문자열을 사용

자바에서 문자열을 표현하는 방법은 String 클래스로부터 String 객체를 생성하여 사용하는 것이다. 


원래 String 클래스는 자바 API에 존재한다. "Hello"라는 문자열이 필요하다고 하면 아래처럼 코딩해야 한다.


char arrayOfHello = {'H','e','l','l'.'o'};

String greetings = new String(arrayOfHello);


그런데 자바에서는 다음과 같이 문자열 리터럴을 제공한다.


String hi = "hello";

문자열은 자주 사용되므로, 문자열을 마치 기본 자료형처럼 사용할 수 있도록 배려한 것이다.


문자열 관련 메소드


문자열형 자료를 숫자형 자료로 변환

String msg="123";

int a;

a=Integer.parseInt(msg);


기타 자료형을 문자형 자료로 변환

String.valueOf("값");


문자열과 문자열 비교

String s1="hello";

String s2="Hello";

if(true ==s1.equals(s2)) System.out.println("참말임");


문자열과 문자열 비교 대문자 무시

String s1="hello";

String s2="Hello";

if(true ==s1.equalsIgnoreCase(s2)) System.out.println("위에서 속았지?");


복잡한 문자열을 처리하는 StringBuffer클래스

stringBuffer str=new StringBuffer();


☞ 전체 문자열 길이 구하기

int length = str.length();


☞ 3번째 문자 구하기

char key = str.charAt(2);


☞ 끝자리에 'abcd'추가하기

str.append("abcd");


※ 그냥 String에서도 가능하다.

    String txt="abc";

    txt+="def";


☞ 3번째에 'b'를 첨가하기

str.insert(2,'b');


☞ StringBuffer를 String형으로 변경하기

String test = str.toString();




반응형

'컴퓨터프로그래밍 > JAVA' 카테고리의 다른 글

오버라이딩(overrriding), 오버로딩(overloading)  (0) 2016.04.22
자바의 상속  (0) 2016.04.20
패키지  (0) 2016.04.16
한글깨짐 방지  (0) 2014.06.12
12_배열예제(1등구하기)  (0) 2013.11.04