public class 클래스명 { } : 공개된 설계도를 새로 정의한다.
- main부
main이라는 이름을 가진 메소드. 메소드(method)는 수행문을 포함하고 있는 이름있는 블록이다.
public class Sample {
public void plus(int x, int y) {
수행문;
수행문;
}
public void minus(int x, int y) {
수행문;
수행문;
}
public List<String> getAlluserNames() {
수행문;
}
}
차례로 plus라는 이름의 메소드, minus라는 이름의 메소드, getAlluserNames라는 이름의 메소드
메소드의 이름은 잘 지어야한다. 이름은 동사형으로 만든다.
자바는 객체프로그램이라 명사적인 사고를 요구한다. 그리고 객체 속에는 기능이 있어야한다. 그 기능은 메소드로 구현해낸다.
메소드 안에는 수행문이 있다. 수행문은 이름있는 블록 안에, 메소드 안에 적어야 한다.
public class Sample {
//문법오류 : 수행문은 메소드 안에 포함되어야 한다.
System.out.println("Hello, world");
}
- 자바 응용프로그램은 반드시 main메소드를 가지고 있어야 한다.
- main 메소드가 없는 자바 응용프로그램은 실행할 수 없다.
- main 메소드는 자바가상머신(JVM : Java Virtual Machine)이 실행하는 메소드다.
- main 메소드는 자바 응용프로그램 실행의 진입점이 되는 중요한 메소드다.
- 자바가상머신이 응용프로그램을 실행한다는 것은 main 메소드의 수행문을 실행하는 것이다.
- main 메소드의 선언부는 반드시 public static void main(String[] args) 여야 한다. args는 다른 이름이어도 된다.
- 수행문
- 수행문은 컴퓨터에게 실행시킬 작업을 표현하는 문장이다.
출력하기, 입력값 읽어오기, 변수 생성하기, 변수에 값 대입하기, 변수에 저장된 값 변경하기, 객체생성하기, 객체의 기능 사용하기, ...
- 수행문은 수행문의 끝을 나타내는 ;끝나야 한다.
- System.out.println( )
System.out.println("안녕하세요. 저는 사람입니다.");
표준 출력장치에 문자열(공백과 빈 문자열을 포함하는 여러 글자로 구성된 텍스트)을 출력한다.
System.out.println('A');
표준 출력장치에 문자(한 글자)를 출력한다.
System.out.println(123);
표준 출력장치에 정수를 출력한다.
System.out.println(3.14);
표준 출력장치에 실수를 출력한다.
System.out.println(true);
표준 출력장치에 불린값 true를 출력한다.
System.out.println(false);
표준 출력장치에 불린값 false를 출력한다.
System.out.println(123+456);
표준 출력장치에 덧셈의 계산결과를 출력한다. (123+456)
System.out.println(123*456);
표준 출력장치에 곱셈의 계산결과를 출력한다. (123*456)
System.out.println(12.3/4.56);
표준 출력장치에 나눗셈의 계산결과를 출력한다. (12.3/4.56)
Java의 리터럴(Literal)
- 리터럴은 프로그램 코드에서 값을 표기하는 방법이다. 고정된 값을 표현하는 방법.
- 정수를 표현하는 리터럴
-123
123
100_000_000 : 세 자리마다 자리수를 표현하는 언더바를 쓸 수 있다.
0123 : 8진법으로 나타내는 정수 (0123 = 1*82 + 2*81 + 3*80)
0x123: 16진법으로 나타내는 정 (0x123 = 1*162 + 2*161 + 2*160)
- 실수를 표현하는 리터럴
3.14
3.0
3.
- 문자를 표현하는 리터럴 (쓸일은 거의 없다)
'A'
'\t' 👉탭 문자
'\b' 👉백스페이스 문자
'\n' 👉줄바꿈 문자
'\\' 👉백슬래시 문자
'\uAC00' 👉유니코드에 해당하는 문자를 표현한다. 유니코드값 AC00은 한글 '가' 문자이다.
'' 👉문법오류, 무조건 한 글자가 들어있어야 한다.
' ' 👉공백문자
- 불린값(boolean)을 표현하는 리터럴
true 👉참 값을 표현한다. 자바의 예약어
false 👉거짓 값을 표현한다. 자바의 예약어
'true' 👉문법오류
"true" 👉텍스트 "true"이다.
- 문자열을 표현하는 리터럴
"" 👉빈 문자열, 길이가 0인 문자열
" " 👉공백을 포함하고 있는 문자열
"A" 👉문자A를 포함하고 있는 문자열 'A'와 "A"는 완전히 다른 값이다.
"선생님!"
"안녕하세요 반갑습니다."
"김유신, 유관순, 강감찬, 이순신"
"김유신\t유관순\t강감찬\t이순신" 👉김유신 유관순 강감찬 이순신
"김유신\n유관순\n강감찬\n이순신" 👉김유신
유관순
강감찬
이순신
예를 들어, 리터럴은 이런 정보를 표현할 때 쓰인다.
<책정보>
책번호 1000 (정수)
제목 "JPA 퀵 스타트" (문자열)
저자 "채규태" (문자열)
출판사 "루비페이퍼" (문자열)
가격 "30000" (정수)
할인가격 "27000" (정수)
할인여부 true (불린)
판매여부 true (불린)
절판여부 false (불린)
포인트적립률 "0.03" (실수)
출판일
<수강신청과목>
과목코드, 과목명, 등등..
요리에 빗대어 표현하자면, 값이 프로그램 재료이다. 값을 가공하는 것이 프로그래밍이다.
값의 종류에 따라 담는 그릇이 다르다. 그 그릇은 다 정해져있다.
정수를 담는 그릇, 실수를 담는 그릇, 문자열을 담는 그릇. 등등.. 이 그릇들을 자료형이라고 한다.
그리고 이 그릇의 종류에는 boolean, byte, short, int(정수 기본), long, float, double(실수 기본), char 이 있다.
자바의 자료형
기본 자료형
- byte, short, int, long, flaot, double, char, boolean
- 기본자료형으로 변수(저장소)를 생성하고, 값을 대입하면 그 저장소에 값이 저장된다.
참조 자료형
- 기본자료형을 제외한 모든 것, 모두 설계도를 가지고 있다.
- 참조자료형으로 변수(저장소)를 생성하고, 그 변수에 객체를 대입(연결)하면 저장소에는 그 객체 대신, 그 객체의 참조값(주소값)이 저장된다.
설계도는 단순하게 청사진이다. 그것만으로는 실제 집을 짓지 못한다. 설계도로 만들어진게 객체이고, 설계도는 메모리 안에 있다. JVM이 어떻게 생성되고 어떻게 사용되는지 알아서 처리해준다. 우리는 설계도만들기와 객체의 획득과 사용에만 포커스를 맞춘다.
주소값은 우리가 알고싶어도 화면에 출력할 수도 없고, 알려주지도 않는다.
기본 자료형변수는 값을 직접적으로 담고 있다. 하지만 참조형변수는 p를 통해 연결된 객체 안에 있는 것을 사용하게끔 한다. p.displayInfo( ); 에서 .은 객체 접근 연산자 이다. 그리고 p와 연결된 객체 안에 있는 display를 사용해라. 라는 뜻이다.
위의 필기에서 우리가 해야할 것은 보라색. 파란색은 JVM이 해줌.
public static void main(String[] args) {
String name = "홍길동";
/* name은 String 설계도로 생성된 객체의 주소값을 담는 참조자료형 변수다.
* name은 메모리의 객체 영역에 생성된 String 객체의 주소값을 가지고 있으며, 그 주소값을 통해서 String 객체와 연결되어 있다.
* "홍길동"은 String 객체의 어딘가에 저장되어 있고, name에 홍길동이 저장된 것은 아니다.
* String name = "홍길동";은 String name = new String("홍길동");의 문법적 설탕이다.
* 문자열은 기본자료형 만큼이나 많이 사용되는 값이기 때문에 name에 "홍길동"이 저장된 것 처럼 사용하도록 설계되었다.
*/
}
대문자로 시작하는 이름은 전부 다 설계도 이다. ctrl키 누르고 String 누르면 String의 설계도가 나온다.
자바의 기본 데이터 타입의 종류
Type | Keyword |
논리형 | boolean |
정수형 | byte |
정수형 | short |
정수형 | int (기본) |
정수형 | long |
실수형 | float |
실수형 | double (기본) |
문자형 | char |
정수형, 실수형은 여러 종류의 그릇이 있지만 자주 쓰는 그릇이 있다.
정수형의 byte나 short는 너무 작다. 돈과 관련된 것들은 long에 담는다. 그 외에는 대부분 int범위 안에 있기 때문에 대부분 int를 많이 쓴다.
여담으로 유튜브 조회수를 담을 때 int를 사용했는데, 싸이의 강남스타일이 최초로 21억을 넘겨버리는 바람에 조회수가 마이너스값이 나왔었다. 그 이후로는 조회수를 담는 그릇을 long으로 바꿨다.
byte는 종종 쓰지만 다른 용도로 사용한다. short와 float은 쓸 일이 없다.
변수(Variable) 사용하기
- 값을 담는 그릇이다.
- 변수는 저장되는 값에 따라서 적절한 자료형을 지정해야한다.
- 한 번 지정된 자료형은 변경할 수 없다.
- 변수에는 지정된 자료형 외의 값은 저장할 수 없다.
- 변수 만들기
자료형 변수명; ← 변수 선언
같은 그릇에 설탕, 소금, 슈가파우더를 넣고 소금을 찾기란 쉽지 않다. 따라서 라벨링을 해놔야 하는데, 이 라벨이 변수명이다. 라벨링 똑바로 해야한다.
- 변수 선언을 위해 프로그램내에서 다루는 값의 타입을 먼저 파악해야 한다.
- 변수명은 명사형으로 짓고, 소문자로 시작한다.
int engScore; // 정수를 담는 그릇이 메모리에 생성됨, 그 그릇의 이름은 engScore임
int korScore;
int mathScore;
boolean passed;
double depositRate;
engScore; // 문법오류, 그릇의 종류가 지정되지 않았다
- 변수에 값 저장하기
자료형 변수명; <-- 변수 선언 / 여기에는 무슨 값이 들어있는지 알 수 없다.
변수명 = 값; <-- 변수의 초기화, 변수에 값을 저장하는 것
자료형 변수명 = 값; <-- 변수 선언과 초기화를 한 번에 하기
int korScore; // 변수 생성
korScore = 100; // 변수에 값 저장, 생성된 변수를 사용할 때는 자료형을 다시 언급하지 않는다
int engScore; // 이름이 engScore라는 변수(저장소)를 메모리에 생성함
int engScore = 100; // 문법오류, 같은 이름을 가진 변수(저장소)를 2개 생성할 수 없음.
/* 이름이 engScore라는 변수(저장소)를 메모리에 또 생성하고, 그 변수에 값을 저장하려고 함. 자료형을 적으면 무조건 변수 생성됨.*/
int mathScore = 80; // 변수 생성하고, 값을 저장
mathScore = 70; // 이름이 mathScore인 저장소는 값이 80이었는데, 값이 70으로 변경됨
boolean passed; // 변수 생성
passed = true; // 변수에 값 저장
- 변수 사용하기
int korScore = 100;
int engScore = 90;
int mathScore = 80;
System.out.println(korScore); // 변수 korScore에 저장된 값을 표준 출력장치에 출력한다.
// 찾아서 출력해주는건 자바가상머신이 알아서 해준다.
System.out.println(engScore); // 변수 engScore에 저장된 값을 표준 출력장치에 출력한다.
System.out.println(mathScore); // 변수 mathScore에 저장된 값을 표준 출력장치에 출력한다.
System.out.println("korScore"); // 문자열 "korScore"을 표준 출력장치에 출력한다.
System.out.println("engScore"); // 문자열 "engScore"을 표준 출력장치에 출력한다.
System.out.println("mathScore"); // 문자열 "mathScore"을 표준 출력장치에 출력한다.
김치를 담았던 통에 안 씻고 소금을 넣을 순 없다. 그래서 초기화를 한다.
int totalScore; //변수가 생성됨, 변수가 초기화되지 않았음
System.out.println(totalScore); //초기화되지 않은 변수는 출력에 사용할 수 없다.
double depositRate;
int orderPrice = 90000;
System.out.println(orderPrice * depositRate); //초기화되지 않은 변수는 계산에 사용할 수 없다.
engScore는 1.1 ~ 4.1 에 위치한다. System.out.println(engScore);를 실행시키면 그 위치를 찾아서 값이 출력된다. 변수를 없애면 ─ engScore 1.1 ~ 4.1 이 부분 삭제 ─ 그 위치에 있는 값(쓰레기 값)은 아직 남아있다. 이후 mathScore 0.1 ~ 3.1 설정한 후 출력하면 오류가 난다.
int mathScore;
System.out.println(mathScore); // 출력오류
올바르게 쓰려면
int mathScore = 101;
System.out.println(mathScore);
변수를 초기화 하기 전까지 무슨 값이 들어있는지 알 수 없다. 변수는 반드시 초기화한 다음 출력, 연산에 사용해야 한다.
= 는 등호가 아닌 대입 연산자이고, "오른쪽값을 왼쪽에 대입한다."는 뜻을 가지고 있다. 등호(equal)는 ==로 적는다
대입 연산자는 연산 우선순위가 제일낮다.
totalScore = korScore + engScore + mathScore;
위의 예제를 보면 덧셈연산자를 먼저 실행 후 대입해야 한다는 것을 알 수 있다.
정수형, 실수형 모두 표현할 수 있는 범위가 정해져있다. int와 int를 계산했을 때 int가 나오지 않을 수도 있다는 점을 염두에 두고 코딩해야한다.
public static void main(String[] args) {
int balanceInt = 1_000_000_000;
int revenueInt = 5;
long balanceLong = 1_000_000_000;
long revenueLong = 5;
int totalInt = balanceInt*revenueInt; // 계산결과 50억을 예상하지만, 실제 total에 저장된 값은 50억이 아니다.
System.out.println(totalInt); // 출력결과 705_032_704
long totalLong1 = balanceInt*revenueInt;
System.out.println(totalLong1); // 출력결과 705032704 똑같이 나온다. long으로 바꿔줬는데 왜?
long totalLong2= balanceLong*revenueLong;
System.out.println(totalLong2); // 출력결과 5000000000
long totalLong3 = balanceInt*revenueLong;
System.out.println(totalLong3); // 출력결과 5000000000
long totalLong4 = balanceLong*revenueInt;
System.out.println(totalLong4); // 출력결과 5000000000
int totalInt2 = balanceLong*revenueInt; // 출력오류 출력값은 long값이어서, int에 넣지 못한다.
}
50억을 이진수로 표현하면 1 00101010 00000101 11110010 00000000 인데,
int는 4byte라서 00101010 00000101 11110010 00000000 까지 밖에 담지 못한다. 이걸 10진수로 바꾸면 705032704여서, 705032704 이 값이 출력된다.
그래서 담는 그릇을 long으로 바꿨는데도 출력결과는 705032704 똑같이 나온다. 왜?
int와 int는 연산하면 int결과가 나오기 때문이다.
long값*long값의 결과는 long값이다.
int값*long값의 결과는 long값이다.
위의 코딩을 참고했을 때, long값을 출력하기 위해선 하나라도 long값이어야 한다.
왜?
그 답을 구하기 위해 자바에서의 연산을 배워야 한다.
자바에서의 연산
- 자바의 모든 연산은 서로 같은 타입일 때 연산이 실행된다.
- 자바의 모든 연산은 연산에 참여한 값의 타입과 연산결과가 항상 동일하다.
3 + 4 -> 7
3.0 + 4.0 -> 7.0
- 자바의 모든 연산은 연산에 참여한 값의 타입이 서로 다를 때 같은 타입으로 변경한 후에 연산이 실행된다.
- 타입 변환의 변환기준은 크기가 더 큰 타입으로, 정밀도가 더 높은 타입으로 변환된다.
3 + 4.0 -> 3.0 + 4.0 -> 7.0
3/4.0 -> 3.0/4.0 -> 0.75
위를 참고해서 봤을 때, 변수 타입이 바뀐게 아니라 꺼내서 바꿔버린 것이다. 이것을 타입형 변환이라 한다. 그래서 아무리 담는 그릇을 long으로 바꾼다고 해도 연산에 참여한 변수들이 int들이기 때문에 출력되지 않았던 것이다.
int값 = Long값 * Int값; // 출력오류! 출력값은 long값인데, int에 넣지 못한다.
형변환에는 자동 형변환과 수동 형변환이 있다.
위의 내용은 자동 형변환에 관한 내용이었고, 지금부터는 수동 형변환에 관한 내용이다.
다음과 같은 변환기준을 가질 때, 개발자가 수동으로 형변환 해주어야 한다.
큰 타입에서 작은타입으로 변할 때
정밀도가 높은 타입의 값을 낮은 타입으로 변환할 때
- 형변환 연산자로 형변환하기
- 형변환 연산자를 이용해서 형변환하는 것은 데이터의 손실이 발생하더라도 형변환 작업을 수행시킨다.
- 개발자가 형변환을 작업을 수행하겠다는 의사를 명시적으로 나타내는 것이다.
int a = 10.24;
/* double -> int로 변해야 되는 상황, 데이터 손실이 발생하는 형변환이기 때문에 자동으로 형변환이 되지 않는다. */
int a1 = (int) 10.24;
/* (int)를 형변환 연산자라고 한다. "손실을 감수하고 int값으로 바꾸겠다."라고 얘기해주는 것.
반올림, 버림은 형변환과 아무 상관없는 행위이다. 반올림, 버림은 연산 관련이다. */
항상 수동형변환이라는게 저 조건에서만 하는건 아니다. 예를 들어 평균을 구할 때, 각 점수는 정수이지만 평균이 실수가 나올 수 있다.
int korScore = 100;
int engScore = 90;
int mathScore = 90;
double average1 = (korScore+engScore+mathScore)/3; // (int+int+int)/int = int <-실제값 93.3333
// double average = 280/3;
// double average = 93; 280/3 => 93.3333 => 93
// double average = 93.0;
// average의 값은 93.0이다.
System.out.println(average1);
double average2 = (korScore+engScore+mathScore)/3.0; // 280/3.0 -> 280.0/3.0 => 93.33333
System.out.println(average2);
//하지만 과목수를 우리는 3.0이라고 하지 않는다.
int subjectCount = 3;
double average3 = (korScore+engScore+mathScore)/(double)subjectCount;
System.out.println(average3);
System.out.printf("%.2f", average3); // %는 실수를 나타내고, 뒤에 소수점 두 자리까지 나오게 시키는건데 보기만 하자.
// 불린타입의 변수에 true/false값 저장하기
boolean passed = true;
boolean isExist = false;
다른 곳에서는 true와 false를 나눌 때, 0과 0이 아닌 수, 0과 1 이런 식으로 나누지만 자바에서는 아니다.
자바에서는 true는 true, false는 false이다.
// 정수타입의 변수에 정수값 저장하기
byte number1 = 100;
short number2 = 100;
int number3 = 100;
long number4 = 100;
// byte number5 = 200; -> 얘는 오류. 표현범위를 초과한 값은 대입할 수 없다.
short number6 = 200;
int number7 = 200;
long number8 = 200;
// short number9 = 1_000_000_000; -> 얘는 오류. 표현범위를 초과한 값은 대입할 수 없다. 10억
int number10 = 1_000_000_000;
long number11 = 1_000_000_000;
// int number12 = 5_000_000_000;
long number13 = 5_000_000_000L; // 정수의 대표자료형이 int기 때문에 모든 정수값은 int범위를 초과할 경우 오류가 발생한다.
// L를 붙이면 int범위가 아닌 long범위의 값으로 여긴다.
long number13 = 5_000_000_000; 가 오류나는 이유 : 정수 리터럴이라 int라고 생각함, 정수 리터럴은 항상 int가 기본타입이다.
정수형의 상수값을 적어둔것인데, 정수형의값은 언제나 int값의 범위일 것으로 생각한다. int가 기본타입이기 때문에. 그래서 뒤에 L을 붙여준다. 정수이긴한데 이거 큰 정수야 라는 의미로 뒤에 L을 붙여준다. 항상 long타입에는 뒤에 L을 붙이자.
// 실수타입의 변수에 실수 저장하기
float number14 = 3.14f; // 실수의 대표자료형이 double이기 때문에 모든 실수값은 double타입의 값으로 여긴다.
// f를 붙이면 double타입이 아닌 float타입으로 여긴다.
double number15 = 3.14;
float number14 = 3.14; "double타입 값을 float타입 값으로 변환할 수 없다." 라고 뜬다. 왜 double이라고 생각하나?
실수의 대표자료형은 double이기 때문에. f를 붙이면 double타입이 아닌 float타입으로 여긴다. 항상 float타입 뒤에는 뒤에 f를 붙이자.
// 문자타입의 변수에 문자 저장하기
char ch1 = '가'; // '가'를 직접 대입하기
char ch2 = '\uac00'; // '가'에 해당하는 유니코드표현식을 대입하기
char ch3 = 0xac00; // '가'에 해당하는 유니코드 16진수값(ac00)을 대입하기 -> 8진수를 입력해도 된다.
char ch4 = 44032; // '가'에 해당하는 16진수 유니코드값(ac00)의 10진수 44032를 대입한다. -> 계산기에서 ac00을 두들기면 나온다.
int number16 = '가'; // 변수에 '가'의 16진수 유니코드값(ac00)을 10진수로 환산한 44032가 대입된다.
int number17 = 'A'; // 변수에 'A'의 16진수 유니코드값(41)을 10진수로 환산한 65가 대입된다.
int number18 = 'B'; // 변수에 'B'의 16진수 유니코드값(42)을 10진수로 환산한 66가 대입된다.
System.out.println(ch1);
System.out.println(ch2);
System.out.println(ch3);
System.out.println(ch4);
System.out.println(number16);
System.out.println(number17);
System.out.println(number18);
정수가 문자로, 문자는 정수로 바꿀 수 있다.
즉, 텍스트파일이나 사진파일, 영상파일 모두 0과 1 (8바이트)로 저장이 되어있다. 그럼 텍스트파일, 사진파일, 영상파일을 어떻게 구분하나? 파일매직넘버(또는 파일시그니처)로 구분한다. 파일의 첫머리에 적는다.
자바의 연산자
자바에서 객체가 아닌 것은 딱 두 개가 있다. 기본자료형과 연산자. 그래서 자바가 완전 객체 프로그램이 아니다.
사칙연산과 %
%는 나머지 연산이다.
암호화에 주로 사용한다. 배수와 범위내 값이 나오는 것을 구할 때 사용한다.
(ex) 1000으로 나눌 때 나머지연산의 값이 0으로 나오는 수 => 1000번째 마다 추첨할 때도 사용한다.
Data().getTime()%6 +1 하면 난수가 나옴. => 무작위 주사위눈을 구할 때 쓴다. 이런 방식으로 로또 자동 추첨 번호도 가능하다.
int a = 10;
int b = 3;
int c5 = a%b // c5의 값은 1이다.
복합대입연산자
+=
-=
*=
/=
%=
cf) = 대입연산자
연산 우선순위가 가장 낮은 연산자다.
int number = 10;
number += 3; // number에 3만큼 증가된 값이 저장된다.
int number2 = 10;
number = 3; // number의 값을 3으로 바꾼다.
int number = 10;
number = number + 3;
System.out.println(number);
number = number + 3;
System.out.println(number);
number = number + 3;
System.out.println(number);
number += 3; // number = number + 2에 대한 "문법적 설탕"이다.
System.out.println(number);
number += 3;
System.out.println(number);
number += 3;
System.out.println(number);
number -= 3;
System.out.println(number);
number -= 3;
System.out.println(number);
number -= 3;
System.out.println(number);
number *= 3;
System.out.println(number);
number *= 3;
System.out.println(number);
증감연산자
++ 변수의 값을 1증가
-- 변수의 값을 1감소
표현:
변수++; ++변수; 변수--; --변수;
- 다른 연산자들은 이항연산자이지만, 증감연산자는 단항 연산자이다.
- 값을 담을 수 있는게 나란히 있다. 그것을 배열이라고 하고, 배열의 방마다 고유한 인덱스가 부여된다.
각 방을 빠짐없이 순서대로 방문하기 위해서, 0,1,2,3.. 이런 식으로 1차이로 부여되는데 1차이 마다 들어가면 된다. 이렇게 연속적으로 연결되어있는 저장소를 방문할때 증감연산자를 사용한다.
int num1 = 10;
num1++;
System.out.println(num1);
++num1;
System.out.println(num1);
- 증감 연산자는 다른 연산자와 혼용해서 쓰지 않는다.
int a = 10;
int b = 10;
// 증감 연산자는 다른 연산자와 혼용해서 쓰지 않는다.
int x = a++; // a의 값을 x에 먼저 대입하고 a값을 증가시킨다.
int y = ++b; // b의 값을 먼저 증가시키고, y에 대입한다.
System.out.println("a: " + a); // 11이 출력된다.
System.out.println("b: " + b); // 11이 출력된다.
System.out.println("x: " + x); // 10이 출력된다.
System.out.println("y: " + y); // 11이 출력된다.
// 증감 연산자를 다른 연산자와 같이 사용하지 않는 경우
int a1 = 10;
int b1 = 10;
a1++;
++b1;
int x1 = a1; // 증감 연산자의 위치와 상관없이 x1에 대입되는 값은 원래 a1보다 1증가된 값이 저장된다.
int y1 = b1; // 증감 연산자의 위치와 상관없이 y1에 대입되는 값은 원래 b1보다 1증가된 값이 저장된다.
System.out.println("a1: " + a1); // 11이 출력된다.
System.out.println("b1: " + b1); // 11이 출력된다.
System.out.println("x1: " + x1); // 10이 출력된다.
System.out.println("y1: " + y1); // 11이 출력된다.
'Skill Tree🌲 > coding_package' 카테고리의 다른 글
Java 웹개발자 과정 5일차 - 약간의 메소드, 배열 (0) | 2022.03.12 |
---|---|
Java 웹개발자 과정 4일차 - switch문, for문, 이중for문, Scanner (0) | 2022.03.08 |
Java 웹개발자 과정 3일차 - 비교연산자, 논리연산자, 삼항연산자, if문, 변수의 스코프, 내포된 if문과 빠른 종료 (0) | 2022.03.06 |
Java 웹개발자 과정 1일차 - Java의 기초 문법, 개념 / 단축키 (0) | 2022.03.03 |
자바 cmd(커맨드)로 실행하기 (0) | 2022.01.31 |