프로그램에 직접 표현한 값
ex) 10, 3.14, "Hello", true, false
float f = 3.14f; // float형 뒤에 f를 붙여야 한다.
double d = 3.14(D); // double형은 뒤에 d를 붙여도 되고 안붙여도 된다. -기본값
지수표현 exponential : 매우 큰수 또는 매우 작은 수를 표현할 때 사용
char a = 'A';
java에서 char표현하는 방식 : 2byte(16bit) 유니코드(Unicode) 문자표현방식을 사용한다. \u + 4자리의 16진수로 표현한다.
'0'-> 10진수 48, = \u0030
'A'-> 10진수 65, = \u0041
'a'-> 10진수 97 = \u0061
'가'-> 10진수 44032 = \uac00
\n : 줄바꿈 (new line)
\t : 탭 (tab)
\r : 캐리지 리턴 (carriage return) 띄어쓰기
\b : 백스페이스 (backspace)
\" : 큰따옴표 \"Hello\" -> "Hello"
\' : 작은따옴표 \'Hello\' -> 'Hello'
\\ : 역슬래시 \\Hello\\ -> \Hello\
예시)
public class FloatLiteral {
public static void main(String[] args) {
float f = 3.14F;
double d = 3.14D;
double e1 = 0.000000001234;
double e2 = 0.1234E-8;
System.out.println(e1);
System.out.println(e2);
double e3 = 4567.890000;
double e4 = 4.56789E+3;
System.out.println(e3);
System.out.println(e4);
char c1 = '가';
char c2 = '\uAC00';
System.out.println(c1);
System.out.println(c2);
System.out.println("Hello\nJava\tHi\bProgram\\\"\'");
final double PI = 3.14;
// PI = 5.55; -> 상수는 바꿀 수 없다
}
}
final
->최종값이기 때문에 변하지 않는다.
ex)
final double PI = 3.14;
final 키워드는 자료형 앞에 사용
상수는 한번 초기화 되면 변하지 않음
public class FloatLiteral {
public static void main(String [] args) {
float f = 3.14F;
double d = 3.14D;
double e1 = 0.000000001234;
double e2 = 0.1234E-8;
System.out.println(e1);
System.out.println(e2);
double e3 = 4567.890000;
double e4 = 4.56789E+3;
System.out.println(e3);
System.out.println(e4);
char c1 ='가';
char c2 ='\uAC00';
System.out.println(c1);
System.out.println(c2);
System.out.println("Hello\nJava\tHi\bProgram\\");
final double PI = 3.14;
}
}
자료형 (data type)을 다른 자료형으로 변환하는 것
*기본 자료형에서 boolean만 제외하고 서로 형 변환이 가능합니다.
논리 <-> 문자 <-> 정수 <-> 실수
정수: byte(1) -> short(2) -> int(4) -> long(8)
실수: float(4) -> double(8)
byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)
예제)
typeConversion.java
public class TypeConversion {
public static void main(String[] args) {
//int a = 20;
//short b = a; 오류남. 작은것을 큰거에 넣어야한다.
short a = 20;
int b = a ;
//double e = 3.14;
//float f = e; 오류남
float c = 3.14f;
double d = c;
int h =300;
double i = h;
int j = 400;
float k = j;
long l = 10L;
double m = 1;
long n = 10L;
float o = n;
char p = 'a';
int q = p;
System.out.println(p);
System.out.println(q);
//boolean r = true;
//int s = r;
}
}
📝
자동 형 변환은 작은 크기의 데이터를 큰 자료형으로 옮길 때 자동으로 일어나며, 주로 데이터를 손실 없이 보존하는 데 사용된다. ex) 작은 byte(1바이트)를 큰 double(8바이트)로 옮길 때 데이터가 그대로 유지된다.
📝 그러나 반대로 큰 자료형에서 작은 자료형으로 변환하거나, 실수형에서 정수형으로 변환할 때는 자동으로 이루어지지 않는다. 이럴 경우에는 개발자가 직접 명시적인 형 변환을 해야 합니다.
2) 강제형 변환 (casting)
개발자가 강제로 형 변환을 시켜야 하는 경우 = casting(강제형 변환)
byte(1) <- short(2) <- int(4) <- long(8) <- float(4) <- double(8)
typeConversion.java
public class TypeConversion {
public static void main(String[] args) {
int i1 = 300;
byte b1 = (byte)i1;
System.out.println(i1);
System.out.println(b1);
int i2 = 32768;
short s1 = (short)i2;
// -32768 ~ 32767 -> 오버플로우 현상
System.out.println(i2);
System.out.println(s1);
int i3 = -129;
byte b2 = (byte)i3;
// -128 ~ 127 -> 언더플로우 현상
System.out.println(i3);
System.out.println(b2);
double d1 = 3.14;
int i4 = (int)d1;
// 실수 -> 정수 : 소수점에 대한 손실
System.out.println(i4);
byte b5 = 127;
int i5 = 100;
System.out.println(b5 + i5); //1:25
System.out.println((byte)(b5 + i5));
System.out.println((int)2.9 + 1.8);
System.out.println((int)(2.9 + 1.8));
System.out.println((char)0x11110041);
System.out.println(10.0/4);
System.out.println(10/4);
}
}
- 출력: System.out.println(); 메소드
- 입력: System.in.read(); -> 키보드를 제어하는 객체.
과 추가적인 Scanner 클래스를 사용한다.
Scanner 클래스를 사용하기 위해서는 java.util 패키지를 import 해야 한다.
import java.util.Scanner;
main 메소드에서 Scanner 객체를 생성한다.
Scanner sc = new Scanner(System.in);
byte b = sc.nextByte();
short s = sc.nextShort();
int i = sc.nextInt();
long l = sc.nextLong();
float f = sc.nextFloat();
double d = sc.nextDouble();
boolean b = sc.nextBoolean();
String str1 = sc.next(); // 문자열 입력 -> 다음 토큰(단어를 구분하는 구분자 ' ', '\n', '\r', '\t')까지 입력받는다.
String str2 = sc.nextLine(); // 문자열 입력 -> 다음 줄까지 입력받는다.-> 다음줄의 '\n'을 제외한 나머지를 입력받는다.
sc.close(); // 사용이 완료되었으면 Scanner 객체를 닫는다. -> 메모리를 해제한다.
예시)
ScannerExample.java
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("이름을 입력하세요 > ");
String name = sc.nextLine();
System.out.println("이름은 " + name);
System.out.print("나이를 입력하세요 > ");
int age = sc.nextInt();
System.out.println("나이는 " + age);
System.out.print("키를 입력하세요 > ");
double height = sc.nextDouble();
System.out.println("키는 " + height + "cm");
System.out.print("결혼 여부를 입력하세요 > ");
boolean marry = sc.nextBoolean();
System.out.println("결혼 여부는 " + marry);
sc.close();
}
}
예시)
ScannerExample2.java
import java.util.Scanner;
public class ScannerExample2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("이름, 나이, 거주도시, 성별을 띄어쓰기로 구분하여 입력하세요.");
String name = sc.next();
int age = sc.nextInt();
String city = sc.next();
String gender = sc.next();
System.out.println("이름: " + name);
System.out.println("나이: " + age);
System.out.println("거주도시: " + city);
System.out.println("성별: " + gender);
sc.close();
}
}
연산자의 종류
1) 산술 연산자 : +, -, *(asterisk), /, %
2) 논리 연산자 : &&, ||, ! (and, or, not), ^(hat)
3) 비트 연산자 : &, |, ~(tilt), ^
4) 대입 연산자 =
- 복합 대입 연산자 : +=, -=, &=, <<=, >>=
5) 비교 연산자 : >, <, >=, <=, ==, !=
6) 조건 연산자 ? :
7) 증감 연산자 : ++, --
8) 시프트(이동 ) <<, >>, >>>
1) 산술 연산자
예시)
public class ArithmeticOperator {
public static void main(String[] args) {
double a = 10;
int b = 20;
double add = a + b; // 30 // 30.0
double sub = a - b; // -10 // -10.0
double mul = a * b; // 200 // 200.0
double div = a / b; // 0.5 -> 0 // 0.5
double rem = a % b; // 10 // 10.0
System.out.println(add);
System.out.println(sub);
System.out.println(mul);
System.out.println(div);
System.out.println(rem);
}
}
2) 비교 연산자
예시)
import java.util.Scanner;
public class ComparisionOperator {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("두 개의 수를 입력하세요 > ");
int num1 = sc.nextInt();
int num2 = sc.nextInt();
sc.close();
boolean b1 = num1 > num2;
boolean b2 = num1 < num2;
boolean b3 = num1 >= num2;
boolean b4 = num1 <= num2;
boolean b5 = num1 == num2;
boolean b6 = num1 != num2;
System.out.println(b1+" "+b2+" "+b3+" "+b4+" "+b5+" "+b6);
}
}
3) 논리 연산자
예시)
public class LogicalOperator {
public static void main(String[] args) {
// AND
System.out.println(true && false);
System.out.println((5!=6) && (7>3));
// OR
System.out.println(false || false);
System.out.println((7==7) || (5==6));
// NOT
System.out.println(!true);
System.out.println(!(6!=6));
System.out.println(!( (5==6) || (4>3) ));
// XOR -> 다르면 true, 같으면 false
System.out.println(true ^ true);
System.out.println(true ^ false);
System.out.println((5>3) ^ (4<=7));
}
}
4) 증감 연산자
예시)
public class DoubleOperator {
public static void main(String[] args) {
int a = 1;
a++;
System.out.println(a);
a--;
System.out.println(a);
++a;
System.out.println(a);
--a;
System.out.println(a);
int b = 1;
System.out.println(++b);//2
System.out.println(--b);//1
System.out.println(b++);//1
System.out.println(b); //2
System.out.println(--b+b++); // 1 -> (1) + 1 -> (2) = 2
System.out.println(b+++--b); // 2 -> (3) + 2 -> (2) = 4
}
}
5) 비트 연산자
예시)
public class BitwiseOperator {
public static void main(String[] args) {
int a = 9;
int b = 5;
System.out.println(a & b); // 1
System.out.println(a | b); // 13
System.out.println(a ^ b); // 12
System.out.println(~a); // -10
System.out.println(9 >> 2); // 10
System.out.println(9 << 2); // 100100
System.out.println(9 >>> 2); // 10
System.out.println(-10 >> 2); // 1001
System.out.println(-10 << 2); // 1001
System.out.println(-10 >>> 2); // 1001
}
}
우선순위가 높은 연산자가 먼저 계산된다.
0. 괄호
1. 증감(뒤)
2. +, -(양수음수표현), 증감(앞), ~, !
3. 형변환
4. *, /, %
5. +, -(산술)
6. <<, >>, >>>(시프트 연산자)
7. <, <=, >, >=, instanceof
8. ==, !=
9. &
10. ^
11. |
12. &&
13. ||
14. ?:
15. 대입 연산자 =, +=, -=, *=, /=, %=, <<=, >>=, >>>=, &=, ^=, |=