변수 : 단 하나의 값을 저장할 수 있는 메모리 공간. 고정x, 다른 값으로 덮어씌울 수 있음.
메모리 공간: 1Byte(정보처리 기초 단위)로 구성. 각각은 공간 구분을 위해 메모리주소 가지고 있음.
메모리에 값을 저장하거나 읽을때 해당 메모리 주소 사용하는데, 특정 메모리 영역에 이름을 붙이고 주소 대신 이름을 사용해 메모리에 값을 저장하고 읽을 수 있게 한 것이 변수.
선언 이유 : 메모리에 값을 저장할 공간을 마련하기 위해
선언 방법 : 변수타입 변수이름;
규칙 : 대소문자구분, 특문은 _랑$만. 숫자로 시작 불가.
일반적으로 java는 camelCase 사용.
초기화 : 변수에 처음으로 값을 저장하는 것.
초기화 방법 : 변수타입 변수이름 = 값;
상수 : 한 번만 값이 저장 가능한 변수. 한 번 저장하면 변경할 수 없는 저장공간.
final 변수타입 변수이름;
으로 선언.
리터럴 : 그 자체로 값. (원래의 상수 개념을 리터럴이라함).
리터럴의 타입(종류)
정수형 : byte short int long
byte short는 연산보단 저장목적임. 기본형은 int. long은 구분위해 접미사 L을 붙임.
int 접두사 : 2진수 - 0b, 8진수 - 0, 16진수 - 0x / 10의n제곱 = en (1e3 = 1000)
실수형 : float double
float에는 접미사 f, double에는 d 가 붙으나 d가 기본형이라 d는 생략.
고로 정수 long의 L, 실수 float의 F만 붙이면 된다. 대소문자 상관없으나 헷갈리니 대문자 쓰면 좋다.
문자형에서 char (글자하나)는 ''를 쓰고, String (문자열)은 ""를 쓴다.
논리형, 정수형, 실수형, 문자형
기본형 변수는 실제 값을 저장.
오버플로우(타입 한계값을 초과)시 값이 순환.
정밀도(실수형에서 소수점 몇자리까지 오차없이 표현가능)
: float은 7자리, double은 15자리.
숫자 + '0' -> 문자 / 문자 - '0' -> 숫자
숫자 + "" -> 문자열 / 문자 + "" -> 문자열
문자열을 숫자로 : Integer.parseInt("문자열") / 문자열을 문자로 : "문자열".charAt(0)
기본형을 제외한 나머지 타입(String, System 등). 항상 4byte(jvm이 64bit면 8byte)
참조형 변수는 메모리주소나 null(어떤 객체의 주소도 저장하지 않음)을 저장.
연산자 : 연산을 수행하는 기호 (+ - * /). 피연산자를 연산.
**모든 연산자는 연산 결과를 반환한다.**
연산자의 종류: 산술, 비교, 논리, 대입, 기타
연산자의 우선순위: 기본적으로 왼쪽에서 오른쪽. 대입과 단항연산자만 오른쪽에서 왼쪽.
단항연산자(부호, ! 등) > 산술{곱나눔나머지 > 덧뺄 > 이동} > 비교(부등호) > 논리(& | && ||) > 대입 (= +=)
단항(1) > 이항(2) > 삼항(3)
증가연산자(++) : 피연산자 값 1 증가 / 감소연산자(--) : 피연산자 값 1 감소
전위형 : k = ++j; 값이 참조되기 전에 값(j)을 증감
후위형 : k = j++; 값이 참조된 후 값(j)을 증감
-
: 부호 반대로.형변환 : 변수나 상수의 타입을 다른 타입으로 변환
(타입)피연산자
로 변환
형변환시 값 손실이 발생할 수 있으니 기존 값을 최대한 보존할 수 있는 타입으로 변환해야.
사칙연산자 : + - / *
산술변환 : 연산전에 피 연산자 타입 일치. 보다 큰 타입으로 일치해야
ex) float + int -> float + float => float
Math는 수학과 관련된 메서드를 가지고 있는 클래스
Math.메서드(값)
으로 사용
round() : 실수를 소수 첫째자리에서 반올림 한 정수를 반환
ceil() : 올림값을 double형으로 반환
floor() : 내림값을 double형으로 반환
abs() : 절대값. int double 둘 다 사용 가능.
ex) 파이를 소수점 4째 자리에서 반올림한 값을 구하라!
double pi = 3.141592
double shortPi = Math.round(pi * 1000) / 1000.0;
// round는 첫째자리에서 반올림하는 Math의 메서드
// 따라서 pi를 1000을 곱해 round(반올림)하고 다시 1000.0으로 나눠주면 됨
System.out.println(shortPi); // 정답 3.142
== : 왼쪽 오른쪽 같으면 참.
!= : 왼쪽 오른쪽 다르면 참.
.> >= < <= : 왼쪽 오른쪽 비교
문자열 비교는 == 대신 equals()
사용
비트 단위연산. & | ^ ~ << >> >>> 0과 1로 표현 가능한 정수형이나 형변환 가능한 자료형만 가능.
부호 절대값 : 가장 왼쪽 비트가 부호비트라고 했을 때 0이면 양수 1이면 음수.
1의 보수 : 11111111 - x. 1을 0으로 0을 1로.
2의 보수 : 100000000 - x. 가장 많이 사용하는 방식. 1의 보수에 +1
조건식 ? 반환값1 : 반환값2
int num = 7;
num -= 3;
sout(num) // 4. 7-3해서 나온값을 num에 넣었기 때문.