본문 바로가기

java,jsp,spring/java

java 기초 (2)

리터럴(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