자바에서의 원시타입은 값 타입으로만 접근할 수 있다.(참조나 주소로는 절대 못 접근함)
부호가 있는 정수타입만 있음
-128부터 127이니깐 혹시 128안 쓰게 조심
char, byte, short를 이용한 계산은 자동으로 int로 변환되어 계산이
이루어짐
우리 프로그램에서 연산할때는 의미가 별로 없다 어차피 CPU로 가면 CPU가 연산하기 좋은 int로 바꿔어서 계산하기 때문에,
단 우리가 데이터 파일을 저장하고 통신 메세지를 전송할때는 의미가 있다. 1byte를 보내는거 하고 4byte를 보내는거 하고 차이가 있기 때문이다.
기본 코드는 유니코드로서 2바이트임(1바이트 아님-> C언어는 아스키로 1바이트)
문제는 -일때 처리를 못해준다는 것이다. 그래서 이때 비트연산을 사용하면 (n&1) == 1 이걸로 더 빠르고 음수까지 처리해줄 수 있다.
여기서 문법 오류나는건 범위를 벗어나서 그런게 아니라 byte끼리 곱하면(사칙연산) int로 변환돼서 하기때문에 우항이 int인것을 좌항 byte에 넣으려고해서 문제이다.
여기서 만드는 난수는 실제난수가 아니라 난수처럼 보이는 의사난수임 그래서 암호학적으로 이걸 난수를 쓰면 안됨. 파악될 수 있기 때문에
여튼 자바에서는 new Random() 하면 알아서 적절한 시드값을 넣어주기 때문에 new Random(System.currentTimeMillis())이렇게 할 필요 없음.
랜덤 값을 만들때 기존에 만들었던 값을 기준으로 랜덤한 값을 만들기 때문에 객체로 모델링하는게 좋다
n&(n-1) == 0
정확도 : 15자리 정도의 유효 숫자만
10d로 표현
더블에서는 대칭적임, -0, +0 (부호비트 써서)
Min이 0에 매우 가까운 수이고
MAX는 가장 큰거
undrerflow 0에 가까운것보다 더 가까워지면 underflow=>이때 0으로
+MAX_VALUE 를 넘어가면 POSITIVE_INFINITY
-MAX_VALUE 보다 아래로 가면 NEGATIVE_INFINITY
0/0 는 Nan이다.
기본이 double인데 float에 넣어서 에러
내부적으로 배열같이 만들어서 연산하는듯 그래서 속도가 느려
+, -, *, / 가 아닌 add, subtract, multiply, divide 메소드를 이용하여 사칙연산 수행한다.
new보다는 qhxhd valueof 메소드를 사용해서 만들어준다
유니코드 자체를 나타내고 싶으면 (\u)확장 문자를 사용함
ex) char c - '\u99E9';
var x = 'a' + 2; //는 char 는 int형으로 변환돼서 연산되기 때문에 int로 된다.
char y = 'b' +3 // 이것도 int로 변환되지만 상수식이고 int의 값이 char로 나타낼 수 있는 범위이면 알아서 타입을 변환해서 넣어준다.
char z = 'f' + 100000; // 이건 int의 범위가 char로 변환될 수 있는 범위를 넣어서기 때문에 에러가 뜬다.
우리는 char가 문자적인 속성과 integer type 둘 다 가지고 있는 이중적인 타입인것을 알아야된다.
그리고 상수식이 아닌 경우에는 char가 연산했을 때는 무조건 int형으로 바뀌기 때문에 nextChar 메서드와 같이 (char)로 변환을 해주어야 한다.
또한 제일 하단의 상자 2개를 봐도 'a' +'e'는 int이기때문에 위의 foo메소드가 호출된다.
오른쪽 방향으로 갈때 확장 변환이라하고 왼쪽 방향으로 가는걸 축소 변환이라고 한다. 자동 축소 변환은 문법 오류임(단, 상수식같은 경우에는 값이 들어갈 수 있는 경우 그냥 들어간다) 그래서 축소 변환을 해줄때는 강제 타입 변환을 해주고(정보 손실이 발생할 수 있음을 생각해야 한다
자바 lang 클래스에 있어서 import 굳이 할 필요 없음
원시타입을 객체로 처리할 수 있는 Wrapper 클래스
자바 5부터는 autoboxing/unboxing 기능으로 자동으로 변환
그리고 wrapper 클래스에는 각 원시 타입과 관련된 상수와 유용한 메소드들이 정의되어 있음
맨 아래줄 대신 n = o 이렇게 해도 상관없다.
+ C에서는 a < b < c
문법 오류가 아니지만 자바에서는 문법오류인 이유 C/C++.에서는 비교연산자는 정수로 평가되지만 자바에서는 비교연산자의 결과는 boolean 이기 때문에 boolean과 int 타입을 비교할 수 없어서 문법 오류이다.
(a < b < c가 된다는 얘기는 아니다)
아래 식을 보면 순서 왜 위에 처럼되는지 이해할 수 있음
S = a + b > 0 && c > 0
a/b/c 이면 a를 먼저 b로 나누고 그 값을 c로 나눈다.
a = b = c 이면 b = c 을 대입하고 a= b를 대입한다.
n += 2.5는 n = (int)(n + 2.5)로 연산되기때문에 에러 없다.