정수형 | 문자형 | 실수형 | 논리형 | |
---|---|---|---|---|
1바이트 | byte | - | - | boolean |
2바이트 | short | char | - | - |
4바이트 | int | - | float | - |
8바이트 | long | - | double | - |
1바이트는 8비트
public class BinaryTest {
public static void main(String[] args) {
int num = 10; //10진수
int bNum = 0B1010; //2진수
int oNum = 012; //8진수
int xNum = 0XA; //16진수
System.out.println(num);
System.out.println(bNum);
System.out.println(oNum);
System.out.println(xNum);
}
}
결과
10
10
10
10
일반적으로 int를 가장 많이 사용한다
긴 정수를 사용할 때 long
long lnum = 123456789000L;
숫자 뒤에 L붙여야함
public class VariableTest {
public static void main(String[] args) {
byte bnum = 127;
System.out.println(bnum);
// int num = 1234568789000;
long lnum = 12345678900L;
//long 했는데 숫자가 작으면 int에서 long으로 바뀜
System.out.println(lnum);
}
}
결과
127
12345678900
정규화를 하기 위해서
1.m * 2^(-n)으로 표현
public class DoubleTest {
public static void main(String[] args) {
double dnum = 3.14;
float fnum = 3.14f;
//실수는 기본적으로 더블이기 때문에 float에는 f를 명시해야함
System.out.println(dnum);
System.out.println(fnum);
}
}
결과
3.14
3.14
ex) A가 65로 = 인코딩
65가 A로 = 디코딩
전세계 언어를 표시하기 위해 유니코드 사용
2바이트, utf-16
자바에서 유니코드 사용
데이터 타입은 char
char ch = 'A';
'A'는 2바이트짜리 문자
"A"는 문자열
다른것이다
"A"는 문자열이기 때문에 A뒤에 문자열의 끝을 나타내는 \n이 있다
char에 숫자로 음수는 넣을 수 없다
2바이트 이상의 숫자는 넣을 수 없다
public class CharacterTest {
public static void main(String[] args) {
char ch1 = 'A';
System.out.println(ch1);
System.out.println((int)ch1);
char ch2 = 66;
System.out.println(ch2);
System.out.println((char)ch2);
int ch3 = 67;
System.out.println(ch3);
System.out.println((char)ch3);
char han = '한';
char ch = '\uD55C';
System.out.println(han);
System.out.println(ch);
}
}
결과
A
65
B
B
67
C
한
한
추론 가능한 변수에 대한 자료형을 선언하지 않아도 되는 것
지역변수는 한 블럭 안에서 사용하는 변수를 말한다
var i = 10;
var j = 10.0;
var str = "hello";
이미 string으로 선언된 str을 뒤에서 숫자형으로 바꾸는 등의 형변환은 안됨!
public class LocalVariableInter {
public static void main(String[] args) {
var i = 10;
var j = 10.0;
var str = "hello";
System.out.println(i);
System.out.println(j);
System.out.println(str);
var str2 = str;
System.out.println(str2);
}
}
첫번째 문자는 영문 대소문자, 한글, 특수문자(_, $)만 가능
대소문자 구분
예약어는 사용할 수 없음
권장사항
시작 문자는 소문자(상수 제외), 문자 간의 공백은 없게
카멜 케이스 사용
상수의 이름은 모두 대문자, 단어 사이 구분은 _
로
상수는 대문자로 주로 표현한다
리터럴은 프로그램에서 사용하는 숫자, 문자, 논리값
상수 풀에 있음
정수리터럴은 int
실수리터럴은 double
정수의 범위가 넘어가는 경우 L,l
float로 사용하려는 경우 F, f 식별자를 써줘야함
public class ConstantTest {
public static void main(String[] args) {
final int MAX_NUM = 100;
final int MIN_NUM;
MIN_NUM = 100;
System.out.println(MAX_NUM);
System.out.println(MIN_NUM);
}
}
결과
100
100
서로 다른 자료형 간의 연산 등의 수행을 위해 하나의 자료형으로 통일하는 것
1. 묵시적 형변환
바이트 크기가 작은 자료형에서 큰 자료형으로의 형 변환은 자동으로 이루어짐 (자동 형변환)
= 덜 정밀한 자료형에서 더 정밀한 자료형으로의 형 변환을 자동으로 이루어짐
실수형을 정수형으로 변환하면 소수점이 버려진다
정수형은 연산자를 사용하게 되면 primitive type들은 정수형의 기본형인 int 타입으로 자동 형변환된다
long 타입은 자동으로 up-casting 된다
부동 소수접은 double 타입이 기본형이다. float 타입으로 할당할 경우 f나 (float) 형변환이 필요하다
public class TypeConversionTest {
public static void main(String[] args) {
// int iNum = 255;
// byte bNum = (byte)iNum;
//
// System.out.println(bNum); // 이상한 값이 나온다
//
// double dNum = 3.14;
// int inum = (int)dNum;
//
// System.out.println(inum);
double dnum = 1.2;
float fnum = 0.9f;
int inum1 = (int)dnum + (int)fnum; //1과 0의 합이 됨
int inum2 = (int)(dnum + fnum); //2.1이 먼저 되고 0.1 탈락
System.out.println(inum1);
System.out.println(inum2);
}
}
결과
1
2
int a = 10
연산의 결과가 true/false로 반환됨
조건문 반복문의 조건식으로 많이 사용됨
결과가 true/false
논리 연산에서 모든 항이 실행되지 않는 경우 - 단락 회로 평가
- 논리 곱은 두 항의 결과가 모두 true일 때만 결과가 true
앞이 false이면 뒤를 평가하지 않음- 논리 합은 두 항의 결과가 모두 false일 때만 결과가 false
앞이 true이면 뒤를 평가하지 않음
public class LogicalTeat {
public static void main(String[] args) {
int num1 = 10;
int i = 2;
boolean value = ((num1 = num1 + 10) > 10) || ((i = i + 2) < 10);
System.out.println(value);
System.out.println(num1);
System.out.println(i);
}
}
결과
true
20
2
조건항 ? 항1 : 항2 - 조건항이 true이면 결과는 항1이 되고 false이면 결과는 항2가 된다
if를 간단히 표현할 때 사용할 수 있다
대입연산자와 다른 연산자가 함께 쓰임
마스크 : 특정 비트를 가리고 몇 개의 비트 값만 사용할 때
비트켜기 : 특정 비트들만을 1로 설정해서 사용하고 싶을 때
예) & 00001111 ( 하위 4비트 중 1인 비트만 꺼내기)
비트끄기 : 특정 비트들만을 0으로 설정해서 사용하고 싶을 때
예) | 11110000 ( 하위 4비트 중 0 인 비트만 0으로 만들기)'
비트 토글 : 모든 비트들을 0은 1로, 1은 0으로 바꾸고 싶을 때
연산자 우선순위
실습
public class BitOperationTest {
public static void main(String[] args) {
int num1 = 5;
int num2 = 10;
System.out.println(num1 | num2);
System.out.println(num1 & num2);
System.out.println(num1 ^ num2);
System.out.println(~num1);
System.out.println(num1 << 2);
System.out.println(num1);
System.out.println(num1 <<= 2);
System.out.println(num1);
}
}
결과
15
0
15
-6
20
5
20
20