Casting
컴퓨터 작동원리
1. 값(literal)은 같은 자료형의 변수에만 대입할 수 있다.
2. 같은 자료형 사이에서 연산이 가능하다.
3. 같은 자료형간 연산 결과는 동일한 자료형이다.
형변환
1. 자동(암묵적) 형변환 : 크기가 작은 타입에서 큰 타입으로 변환.
long에서 float은 float과 double이 지수표현식으로 저장하기 때문.
byte(1)->short(2)->int(4)->long(8)->float(4)->double(8)
char(2)
int i=3;
double d=3.3;
System.out.println(i+d); ///i가 double형으로 변환
예외상황
1. int보다 작은 자료형(byte, short, char)은 연산시에 무조건 int로 변환
2. int -> char 로도 암묵적으로 형변환 처리 가능
char ch='a';
int a = ch;
System.out.println(a);
//char -> int 로 변환시에는 아스키코드 테이블 참조
System.out.println('A'+100);
[아스키코드 테이블]
2. 수동(명시적) 현변환
데이터 손실을 감수하고 형변환
소수점이하 연산이 필요한 경우
overflow 방지
public void test2() {
double dnum=23.456;
System.out.println((int)dnum);//데이터손실 감수하고 소수점이하 버림
System.out.println(5/(double)2); //double -> int로
System.out.println((double)5/2); //double -> int로
Printf
System.out.printf(포맷문자열, 요소1, 요소2, ....)
-포맷문자열안의 패턴문자를 전달한 값으로 치환 후 출력
%d 정수
%f 실수 : 기본적으로 소수점이하 6자리 표현 %.1f -> 반올림해서 소수점이하 첫번째 자리까지.
%b 논리형
%c 문자
%s 문자열 %10s (너비10, 우측정렬) %-10s (너비10,좌측정렬)
%n \n 개행문자(값으로 치환하는 것 아님)
%% escaping처리 %을 문자표현
String
참조형
리터럴을 직접 대입할 수 있는, 기본형처럼 사용가능한 참조형
//더하기는 연결 연산
String str1="기차";
str1=str1+"칙칙";
str1=str1+"폭폭";
System.out.println(str1);
//다른 타입이랑 더할 시 모두 문자열으로 변환
str1=str1+123;
str1=str1+45;
System.out.println(str1); //결과 = 기차칙칙폭폭12345
그렇다면 숫자와 문자를 더할경우는? 순서에 따라 달라진다.
System.out.println("abc"+('d'+1));
System.out.println("abc"+'d'+1);
System.out.println('a'+1+"bcd");
첫번째 줄의 결과는 "abc"+101= abc101
두번째 줄의 결과는 ("abc"+'d')를 string으로 먼저 쓰고 1을 더함. 결과 = abcd1
세번째 줄의 결과는 ('a'+1) +"bcd" 로 'a'+1=98이다. 결과 = 98bcd
Scanner
java.util.Scanner
사용자 키보드 입력값을 읽어오는 객체
1. next계열 메소드
- next()
- nextInt()
- nextDouble()
- nextBoolean()
- ...
- 단, nextChar()는 없다.
- next()는 공백 전까지만 읽어온다.
nextChar가 없는 것을 대신하여 이 방법을 쓰자.
String -> char
System.out.print("성별 (남/여): ");
String temp= sc.next();
char gender=temp.charAt(0); //String의 첫번째 문자만 가져옴. String-> char
System.out.printf("당신은 [%c]자이군요...%n",gender);
charAt(0) 을 쓰면 temp의 첫번째(0번째)문자를 가져온다.
마찬가지로 charAt(4) 는 4번째 문자를 가져온다.
2. nextLine 계열 메소드
- 개행문자까지 읽어와서 개행문자를 버리고 반환
- 실제 값 이전에 만난 공백과 개행문자는 무시하고, 마지막 공백과 개행문자 전까지만 읽어온다.
- next계열 메소드 사용 직후 nextLine 사용하고자 한다면, 개행문자 날리기용 nextLine을 삽입해야 한다.
next()다음에 nextLine()을 바로 쓰면 주소를 입력하지 않았는데도 <terminated> 가 나오면서 끝난다.
이를 방지하기 위해서는 next(); 다음에
개행문자 날리기용 sc.nextLine(); 이 필요하다.
nextLine 공백이 있는 문자열 처리
next계열 메소드 사용 직후 nextLine 사용하고자 한다면,
개행문자 날리기용 nextLine 삽입해야 한다.
String year = sc.next().substring(0,4); 0~3 까지 4자리만 보여줌.
오늘 알게된 꿀팁
자바 자동 import : Ctrl+Shift+O
윈도우+Shift+S ⇒ 선택캡쳐