오늘 하루도 파이팅이다... 참고로 나는 오늘 스카에서 2샷 추가해서 총 4샷 된 아메리카노 마시는 중이다. 너무 졸려 ㅠㅡㅠ
변수 = 메모리 공간에 붙여진 이름
int num1; //변수 num1 선언
int num2; //변수 num2 선언
숫자로 시작하면 안 된다.
대소문자를 구분할 줄 알기 때문에 신경써서 이름 지을 것.
특수문자는 변수의 이름에 사용 금지.($과 _ 제외)
키워드는 변수의 이름으로 사용 금지
총 byte, short, int, long 4가지가 있다.
int main(String[] args){
short num1 = 11;
short num2 = 22;
short result = num1 + num2;
System.out.println(result);
}
이러면 33이 나올까?
천만에
절대 안 나온다. 왜냐하면 정수형 연산은 only int형으로 진행하기 때문에 그냥 정수 선언할 때 int형 써라.
float, double이 있다.
char 있다. 또한, 유니코드로 구할 수도 있다!
boolean 있다
true = '참'을 의미하는 값
false = '거짓'을 의미하는 값
final이라는 선언을 추가하면 이 변수는 '상수'가 된다.
public class practice {
public static void main(String[] args){
final int MAX_SIZE = 100;
final char CONST_CHAR = 'h';
final int CONST_ASSIGNED;
CONST_ASSIGNED = 20;
System.out.println("1 is" + MAX_SIZE);
System.out.println("2 is" + CONST_CHAR);
System.out.println("3 is" + CONST_ASSIGNED);
}
}
// output
1 is100
2 ish
3 is20
int num = 157;
숫자 157은 리터럴 상수다.(그냥 상수도 맞음)
int num = 11 + 22 + 33;
int num = 011 + 022 + 033;
-16진수로 int형 정수 표현: 숫자 앞에 0x 또는 0X 삽입
int num = 0x11 + 0x22 + 0x33;
자바는 byte형이나 short형 정수의 표현 방법을 제공하지 않기 때문에
byte num1 = 5
short num2 = 3
로 초기화가 가능하다.
long형은 숫자의 끝에 문자 L이나 l를 붙인다.
System.out.println(189248710L)
앞에 0B 또는 0b를 붙임.
그리고 숫자가 어마무시하게 클 경우에는 underbar를 넣어준다
int num = 100_000_000
double pi = 3.1415 //실수형 상수
만약, 두 실수가 double형인 상수를 밝히고 싶다면, d나 D 붙임
float형도 마찬가지
System.out.println(3.00065D + 4.19006D);
부울형: true false
문자형: '한' '글' 'A' 'Z'
추가적으로 이스케이프 시퀀스(escape sequences)도 있음
'b' 백스페이스 문자
'\t' 탭 문자
'\' 백슬러시 문자
'\'' 작은따옴표 문자
'\"' 큰따옴표 문자
'\n' 개 행 문자
'\r' 캐리지 리턴 문자
public class practice {
public static void main(String[] args){
System.out.println("AB" + '\b' + 'C');
System.out.println("AB" + '\'' + 'C');
System.out.println("AB" + '\t' + 'C');
System.out.println("AB" + '\r' + 'C');
}
}
//output
AC
AB'C
AB C
C
자료형이 다른 두 값을 대상으로 덧셈을 진행하지 못해서 형을 맞추어 줘야 함
int num1 = 10;
double num2 = 4.00089D;
System.out.println(num1 + num2);
num1은 int형, num2는 double형이기 때문에 오류 생김. 그래서 자료형 변환을 해줘야 함.
double num1 = 30;
//int형 정수 30은 double형으로 자동 형 변환
System.out.println(59L + 34.5)
//long형 정수 59L은 double형으로 자동 형 변환
double pi = 3.1415;
int wholeNumber = (int)pi;
//pi의 값을 int형으로 명시적 형 변환
long num1 = 300000007L;
int num2 = (int)num1;
//num1의 값을 int형으로 명시적 형 변환
근데 두 번째 case는 오류가 생긴다. long형은 int형보다 바이트를 많이 차지하기 때문에 크기가 잘려 나간다. 4바이트만 저장된다.
또한, 이런 경우에서도 오류가 생긴다.
short num1 = 1;
short num2 = 2;
short num3 = num1 + num2:
그 이유는 무엇이냐면 일단 앞에서도 얘기했다 싶듯이 연산은 모두 int형으로 일어나기 때문에 인식하지 못한다! 그러면 short형으로 더한 값을 그래도 output으로 나타내고 싶은데 어떻게 하냐?
short num3 = (short)(num1 + num2)
이렇게 한 번 더 감싸주면 된다!!
우선순위에 맞춰서 계산해야 한다.
'='
연산자 오른쪽에 있는 값을 연산자 왼쪽에 있는 변수에 대입
'+'
두 피연산자의 값을 더함
'-'
왼쪽의 피연산자 값에서 오른쪽의 피연산자 값을 뺌
'*'
두 피연산자의 값을 곱한다
'/'
왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눈다
'%'
왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눴을 때,
얻게 되는 나머지를 반환함
+) 자바에선 추가적으로 7 / 3를 해도 정수 2가 나온다.(파이썬은 3.5가 나옴)
실수형이 궁금할 경우에는 7.0 / 3.0 = 2.3333333335
a = a + b <-same-> a+= b
a = a - b <-same-> a-= b
a = a b <-same-> a= b
a = a / b <-same-> a/= b
a = a % b <-same-> a%= b
<
<=
==
!=
&& and
|| or
! not
다만 주의해야 할 점이 있다.
public class practice {
public static void main(String[] args){
int num1 = 0;
int num2 = 0;
boolean result;
result = ((num1 += 10) < 0) && ((num2 += 10) > 0);
System.out.println("result =" + result);
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
result = ((num1 += 10) > 0) || ((num2 += 10) > 0);
System.out.println("result =" + result);
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
}
}
왜 num2의 값이 다 0만 나오는지에 대하여 궁금해하는 사람이 있을 것 같다.
(num1 += 10) < 0) && ((num2 += 10) > 0);
앞 문장이 false가 나오면 뒤가 true든 false든 && 때문에 무조건 false가 나오기 때문에 뒷문장을 실행하지 않는다.
((num1 += 10) > 0) || ((num2 += 10) > 0);
이 문장도 마찬가지다. 앞에 true가 나오면 ||는 or라서, 뒷문장이 false가 나오든 true가 나오든 true로 실행이 되기 때문에, 실행하지 않는다.
그렇기 때문에 이러한 오류가 생기는 것이다. 어떻게 하면 오류를 없애느냐?
num1 += 10;
num2 += 10;
result = (num1 < 0) && (num2 > 0);
이렇게 코드를 나누어 작성하면 괜찮다.
short num1 = 5;
short num2 = (short)(+num1);
short num3 = (short)(-num1);
System.out.println(num2);
System.out.println(num3);
//output
5
-5
이런 식으로 가능하다
++ 피연산자에 저장된 값을 1 증가
-- 피연산자에 저장된 값을 1 감소
++7 있으면 바로 증가,
7++ 실행 후 1 증가
& 비트 단위를 AND 연산을 한다
| 비트 단위를 OR 연산을 한다
^ 비트 단위를 XOR 연산을 한다
~ 피연산자의 모든 비트를 반전시켜서 얻은 결과 반환
(안 귀찮을 때 추가하겠습니다.)