참조형 변수
- 어떤 값이 저장되어 있는 주소를 값으로 가짐 (기본형은 실제 값(data)을 저장함)
- 기본형 (boolean, char, byte, short, int, long, float, double) 제외한 나머지 타입
- 객체의 주소 저장
- C언어와 달리 참조형 변수 간의 연산 할 수 없음
- 선언 시 변수 타입으로 클래스의 이름을 사용 - 클래스의 이름이 참조변수의 타입이 됨
상수와 리터럴 (constant & literal)
상수 constant
- 값을 저장할 수 있는 공간
- 한 번 값 저장하면 다른 값으로 변경할 수 없음
- 변수 타입 앞에 'final' 붙여주면 됨
- 선언과 동시에 초기화해야함
리터럴 literal
- 값을 의미
- 상수가 저장공간으로 정의되어서 구분하기 위해 부르는 다른 이름
- 변수 : 하나의 값 저장 위한 공간
- 상수 : 값을 한 번만 저장할 수 있는 공간
- 리터럴 : 그 자체로 값 의미
리터럴에 접미사 붙여서 값 구분함
- 정수형 long 타입에 l 또는 L 붙임 - 접미사 없으면 int형
- 실수형 float 타입에 f, double 타입에 d (d는 생략 가능)
- 16진수 - 앞에 접두사 '0x' 또는 '0X', 8진수 - 앞에 접두사 '0'
정수형 리터럴 중간에 '_' 넣을 수 있게 됨 (JDK1.7 부터)
- long big = 100_000_000_000L;
- long hex = 0xFFFF_FFFF_FFFF_FFFFL;
문자 리터럴, 문자열 리터럴
- ''로 문자 하나 감싸면 문자 리터럴
- ""로 두 문자 이상 감싼 것 문자열 리터럴 (String)
- 빈 문자열 가능 (""), 빈 문자 불가능 ('')
- 기본형 타입의 값 문자열로 변환 시 빈 문자열 더해주면 됨 (7+"" -> "7")
약 +-20억을 넘어갈 경우 long 사용하기
형식화된 출력
- println() : 변수 값 그대로 출력해서 값 변환하지 않고는 다른 형식으로 출력할 수 없음
- printf() : 소수점 둘째자리까지, 정수를 16진수/8진수로 출력하기 등에 사용 가능
- C의 printf()와 비슷한듯 (%d 사용해서 값 넣기, %n으로 줄바꿈 가능)
- C에서는 char 타입의 값을 %d로 출력 가능, java에서는 int로 형변환해야 가능함 (int)score
화면에서 입력받기
Scanner
improt java.util.*;
class ScannerEx{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in); //Scanner 클래스 객체 생성
String input = scanner.nextLine();
int num = Integer.parseInt(input);
int number = scanner.nextInt();
}
}
숫자가 아닌 문자 입력하거나 공백 입력 시 Integer.parseInt()에서 에러 발생함
형변환 (casting)
- (타입)피연산자
- (): 캐스트 연산자, 형변환 연산자
- 큰 타입 -> 작은 타입으로 변환할 때 값 손실이 발생할 수 있음 (저장 공간보다 큰 값 변환할 때 생략 시 에러남)
- 작은 타입 -> 큰 타입으로 변환할 때 값 손실 발생 안함 (생략 가능)