리터럴(literal)
- 변수의 값
int apple = 5; // 리터럴 : 5
int apple;
apple = 5;
long count = 10000L; // long 타입을 표현하기 위해 L을 붙임
float f1 = 2.3F; // float 타입을 표현하기 위해 F를 붙임
double d1 = 5.6D; // double 타입을 표현하기 위해 D를 붙임
- 정수 리터럴
15 // 10진수
015 // 8진수 - 0 으로 시작
0x15 // 16진수 - 0x / 0X 로 시작
0b0101 // 2진수 - 0b / 0B 로 시작
- 실수 리터럴
double d = 0.1234;
double e = 1234E-4;
float f = 0.1234f;
- 논리 리터럴
boolean a = true;
boolean b = 10 > 0; //java에서는 숫자 비교 참,거짓 인식을 못함
boolean c = 1;
- 문자 리터럴
char a = 'A'; // 유니코드: 65
char b = '가'; // 유니코드: 44032
char c = 65; // 10진수 > 유니코드 65가 변환되어 A가 표시
public class CharExample {
public static void main(String[] args) {
char c1 = 'A';
char c2 = 65;
char c3 = '\u0041'; // '\u' : 16진수
char c4 = '가';
char c5 = 44032;
char c6 = '\uac00';
System.out.println(c1); // A
System.out.println(c2); // A
System.out.println(c3); // A
System.out.println(c4); // 가
System.out.println(c5); // 가
System.out.println(c6); // 가
}
}
종류 | 의미 | 종류 | 의미 |
‘\b’ | 백스페이스 | ‘\r’ | 캐리지 리턴 |
‘\t’ | 탭 | ‘\”’ | 이중 인용부호 |
‘\n’ | 라인피드 | ‘\’’ | 단일 인용부호 |
‘\f’ | 폼피드 | ‘\\’ | 백슬래시 |
public class EscapeExample {
public static void main(String[] args) {
System.out.println("번호\t이름\t직업");
System.out.print("행 단위 출력\n"); //ln : line <br>적용
System.out.println("우리는 \"개발자\" 입니다.");
System.out.println("봄\\여름\\가을\\겨울");
}
- 문자열 리터럴
String str = "Good";
- null 리터럴
int n = null; // 오류 - int는 자료형으로 default를 0은 되지만 null은 안된다.
// -> 사용하기 위해서는 int를 Integer(객체)로 해야함
String str = null;
- 숫자에 ‘_’ 허용 : 가독성을 위해 사용
//사용 예
int price = 20_100;
long cardNumber = 1234_5678_9012_9999L;
//허용되지 않는 경우
int x = 15_; // 제일 뒤에 사용 x
double pi = 3_.14; // 점 앞에 사용 x
int y = 0_x15; // 진법 구분 하는거 사이에 사용 x
정수 타입
- 2진수 : 0b 또는 0B로 시작, 0과 1로 구성 ex) 0b10100 > 1x2^4 + 0x2^3 + 1x2^2 + 0x2^1 + 0x2^0 = 20
- 8진수 : 0으로 시작, 0~7로 구성 ex) 0206 > 2x8^2 + 0x8^1 + 6x8^0 = 134
- 10진수 : 소수점이 없는 0~9로 구성
- 16진수 : 0x 또는 0X로 시작, 0~9의 숫자와 A,B,C,D,E,F 또는 a,b,c,d,e,f로 구성 ex) 0x2A0F > 2x16^3 + A(10)x16^2 + 0x16^1 + F(15)x16^0 = 10767
package chapter02;
public class IntegerLiteralExample {
public static void main(String[] args) {
int var1 = 0b1011; //1*2^3 + 1*2^1 + 1*2^0 = 8+2+1 = 11
int var2 = 0206; //2*8^2 + 6*8^0 = 128+6 = 134
int var3 = 365;
int var4 = 0xB3; //B(11)*16^1 + 3*16^0 = 176+3 = 179
System.out.println("var1: " + var1); // var1: 11
System.out.println("var2: " + var2); // var2: 134
System.out.println("var3: " + var3); // var3: 365
System.out.println("var4: " + var4); // var4: 179
}
}
- 타입
타입 메모리 사용 크기 저장되는 값의 허용 범위 byte 1byte(8bit) -2^7 ~ 2^7-1 / -128 ~ 127 short 2byte(16bit) -2^15 ~ 2^15-1 / -32,768 ~ 32,767 char 2byte(16bit) 0 ~ 2^16-1 / 0 ~ 65535 int 4byte(32bit) -2^31 ~ 2^31-1 / -2,147,483,648 ~ 2,147,483,647 long 8byte(64bit) -2^63 ~ 2^63-1 / -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 package chapter02; public class LongExample { public static void main(String[] args) { long var1 = 10; long var2 = 20L; long var3 = 20l; // 1과 헷갈릴 수 있어 L을 많이 사용 // long var4 = 10000000000; // 컴파일러가 정수는 기본적으로 int로 인식해 // 오류가 나옴 long var4 = 10000000000L; // long var5 = 10000000000000000000L; // 범위를 벗어나 오류 발생 System.out.println(var1); System.out.println(var2); System.out.println(var3); System.out.println(var4); } }
실수 타입
타입 메모리 사용 크기 저장되는 값의 허용 범위
float | 4byte(32bit) | 1.4x10^-45 ~ 3.4x10^38 |
double | 8byte(64bit) | 4.9x10^-324 ~ 1.8x10^308 |
public class FloatDoubleExample {
public static void main(String[] args) {
//float var1 = 3.14; // 컴파일 에러 - 기본 인식이 double 타입이어서 변환 오류
float var1 = 3.14f;
//float var1 = 3.14f; //변수가 중복되면 오류
var1 = 3.15f; //변수의 값을 변경하는 것이기 때문에 오류가 안남
double var2 = 3.14;
float var3 = 0.1234567890123456789901234f;
float var4 = 0.9876543210f;
double var5 = 0.1234567890123456789901234;
double var6 = 0.9876543210124;
double var7 = 3e6; //3x10^6
float var8 = 3e6f;
double var9 = 2e-3; //2x10^-3
System.out.println("var1: "+var1); // var1: 3.15
System.out.println("var2: "+var2); // var2: 3.14
System.out.println("var3: "+var3); // var3: 0.12345679
System.out.println("var4: "+var4); // var4: 0.9876543
System.out.println("var5: "+var5); // var5: 0.12345678901234568
System.out.println("var6: "+var6); // var6: 0.9876543210124
System.out.println("var7: "+var7); // var7: 3000000.0
System.out.println("var8: "+var8); // var8: 3000000.0
System.out.println("var9: "+var9); // var9: 0.002
}
}
타입 변환
- 숫자 연산의 결과 타입
int a = 5/2; //2 -> 정수와 정수의 연산결과는 정수
double b = 5/2.0; //2.5 -> 정수와 실수의 연산결과는 실수
- 타입 불일치 : 대입할 값과 변수의 타입이 서로 다른 경우 문제가 발생할 수 있음
int score = "100"; // 변수는 int 타입, 값은 string 타입으로
// 컴파일 에러 발생
int score = 100;
String score = "100";
- 타입 변환
- 자동 변환 : 작은 타입의 데이터는 같은 범주의 큰 데이터 타입으로 자동 변환 ex) 정수 > 실수로 자동 변환
- 강제 타입 변환
double p = 2; // 정수 2가 실수 2.0으로 자동 변환
//자동 타입 변환이 안 되는 경우
int n = 300;
byte b = n;
//강제 타입 변환
byte b = (byte)n;
// n : 0x0000012C (32비트) - 정수 300 > b : 0x2C (8비트) - 정수 44
// 1비트 : 0,1(2진수) > 0000 ~ 1111 > 16진수 (0~9, A~F) 1개가 4비트
- 다운 캐스팅 : 넓은 범위에서 좁은 범위로 해석
- 업 캐스팅 : 좁은 범위에서 넓은 범위로 해석
int r = (int) 10.4; // r=10 > 다운 캐스팅
double s = (double) 7; // s=7.0 > 업 캐스팅
- 문자열과 숫자 간 타입 변환
String x = "3";
String y = "7";
System.out.println(x + y); // 37 출력 - 문자열이 연결된 것
int x = Integer.parseInt("3"); //Integer.parseInt: 문자열을 정수로 변환하는 메소드
int y = Integer.parseInt("7"); //Integer : 객체
System.out.println(x + y); // 10 출력
double z = Double.parseDouble("-9.81"); // z=-9.81
String a = "" + 1234; // 문자열 1234 생성
String b = "" + 3.14; // 문자열 3.14 생성
String c = Integer.toString(123); // 문자열 123 생성
String d = Double.toString(1.23); // 문자열 1.23 생성
scanner Class
- 입력 > System.in(바이트 표준 입력 스트림) > 바이트 데이터 > 자바 응용프로그램 : 바이트 데이터가 많이 쌓이면 어떤 글자인지 알기 힘듦
- 입력 > System.in > 바이트 스트림 > scanner > 입력한 값 > 자바 응용프로그램
import java.util.Scanner;
Scanner a = new Scanner(System.in); // (값): 매개 변수
import java.util.Scanner;
public class ScannerEx {
public static void main(String[] args) {
System.out.println("이름, 도시, 나이, 체중, 독신 여부를 빈칸으로 분리하여 입력하세요.");
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
System.out.println("이름은 "+name+",");
String city = scanner.next();
System.out.println("도시는 "+city+",");
int age = scanner.nextInt();
System.out.println("나이는 "+age+"살,");
double weight = scanner.nextDouble();
System.out.println("몸무게는 "+weight+"kg,");
boolean single = scanner.nextBoolean();
System.out.println("독신 여부는 "+single+"입니다.");
}
}
- Scanner에서 키 입력 받기 > 토큰 단위로 받음 (javascript에서 prompt)
- 주요 메소드
메소드 의미 메소드 의미 String next() 다음 토큰을 문자열로 리턴 byte nextByte() 다음 토큰을 byte 타입으로 리턴 short nextShort() 다음 토큰을 short 타입으로 리턴 int nextInt() 다음 토큰을 int 타입으로 리턴 long nextLong() 다음 토큰을 long 타입으로 리턴 float nextFloat() 다음 토큰을 float 타입으로 리턴 double nextDouble() 다음 토큰을 double 타입으로 리턴 boolean nextBoolean() 다음 토큰을 boolean 타입으로 리턴 String nextLine() 문자열 받고 다음행으로 이동
(단, enter를 치기 전까지 입력한 모든 문자열을 리턴한다.)void close() scanner 사용 종료 후 반납 boolean hasNext() 다음에 값이 있으면 참 아니면 거짓
연산자
연산의 종류 연산자
증감 | ++ - - |
산술 | + - * / % |
비교 | > < >= <= == != |
조건 | ? : |
대입 | = *= /= += -= |
- 연산자 우선순위가 높은 연산자 부터 계산 (증감 > 산술 > 비교 > 논리 > 대입)
- 논리 연산자
종류 의미 AND( && ) 둘 다 참이면 참, 아니면 거짓 OR ( || ) 둘 중 하나라도 참이면 참 아니면 거짓 XOR ( ^ ) 두 논리값이 다르면 참 같으면 거짓 NOT ( ! ) 논리값의 결과가 반대 20 <= age < 30 // 오류 발생 (age >= 20) && (age < 30)
- 삼항 조건 연산자
public class TernaryOperator { public static void main(String[] args) { int a=3, b=5; System.out.println("두 수의 차는 "+((a>b)?(a-b):(b-a))); } // 거짓으로 b-a 식이 적용되어 2가 출력 }
public class AssignmentIncDecOperator {
public static void main(String[] args) {
int a=3,b=3,c=3;
a += 3;
b *= 3;
c %= 2;
System.out.println("a="+a+",b="+b+",c="+c);
int d=3;
a = d++; // d의 값을 a에 대입 후 d가 1 증가
System.out.println("a="+a+",d="+d); // a=3, d=4
a = ++d; // d의 값을 1 증가 후 a에 대입
System.out.println("a="+a+",d="+d); // a=5, d=5
}
}
public class LogicalOperator {
public static void main(String[] args) {
System.out.println('a' > 'b'); // 유니코드 상 b가 a 보다 큼 > false
System.out.println(3 >= 2); // true
System.out.println(-1 < 0); // true
System.out.println(3.45 <= 2); // false
System.out.println(3 == 2); // false
System.out.println(3 != 2); // true
System.out.println(!(3 != 2)); // false
System.out.println();
System.out.println((3 > 2)&&(3 > 4)); //false
System.out.println((3 != 2)||(-1 > 0)); //true
System.out.println((3 != 2)^(-1 > 0)); //true
}
}
'java,jsp,spring > java' 카테고리의 다른 글
java 배열 (0) | 2022.07.18 |
---|---|
java 기초 (5) (0) | 2022.07.18 |
java 기초 (4) (0) | 2022.07.14 |
java 기초 (3) (0) | 2022.07.13 |
java 기초 (1) (0) | 2022.07.11 |