- 자료출처
생활코딩 by egoing - 자바: https://opentutorials.org/module/516
남궁석의 자바의정석: https://github.com/castello/javajungsuk_basic/
- 변수
1. 변수란?: 하나의 값을 저장할 수 있는 저장공간(그릇)
1) 변수를 선언하는 방법:
변수타입 변수이름 ;
int x;
==>"x"라는 이름의 변수(저장공간)이 생기게 됨
2) 변수에 값을 저장하는 법
변수이름 = 값;
x = 5;
*프로그래밍에서는 "="가 등호가 아닌, "저장"의 의미를 갖는 대입연산자임
3) 하나의 변수는 하나의 값만을 저장할 수 있음(중복저장시 마지막 저장값이 남음)
x = 5;
x= 3;
===> System.out.println(x) /// 결과값은 3
4) 변수, 저장값 한 줄에 적기
int x; iint x = 5;
x=5;
2. 변수의 타입
1) 기본형 : 정수형 & 실수형
정수형
데이터 타입 | 메모리의 크기 | 표현 가능 범위 |
byte | 1 byte | -128 ~ 127 |
short | 2 byte | -32,768 ~ 32,767 |
int | 4 byte | -2,147,483,648~2,147,483,647 |
long | 8 byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
실수형
float | 4byte | ±(1.40129846432481707e-45 ~ 3.40282346638528860e+38) |
double | 8byte | ±(4.94065645841246544e-324d ~ 1.79769313486231570e+308d) |
문자
char | 2byte | 모든 유니코드 문자 |
String | 4byte | 문자열 |
3. 상수와 리터럴
1) 상수(constant): "저장공간" but 저장 이후 값 변경 불가 (변수는 가능)
- 상수 선언방법: 변수 타입 앞에 키워드 "final" 입력
final int MAX_SPEED = 10;
(변수 앞에 final이 붙어있으므로 상수에 저장된 값은 추후 변경할 수 없음)
* 상수의 이름은 capital 표기가 관례임
2) 리터럴(literal) : 수학적 개념의 상수임, 그 자체로 값을 의미하는 것
4. 리터럴 타입과 접미사
: 리터럴에도 타입이 있으며, 변수의 타입은 리터럴의 타입에 의해 결정됨.
종류 | 리터럴 | 접미사 |
논리형 | false, true | 없음 |
정수형 | 123, 0b0101, 100L | L |
실수형 | 3.14, 3.0, 1.4f | f,d |
문자형 | 'a', '1', '\n' | 없음 |
문자열 | "ABC", "123", "A", " ", "TRUE" | 없음 |
* 자바 defalult 컴파일 값: 정수형 -> int, 실수형 ->double
5. 두 변수간 값 바꾸기
int x= 10;
int y=20;
x<->y
int tem = x;
x= y;
y= tem;
6. 기본형과 참조형
- 기본형: 정수 & 실수 데이터타입 (8종)
계산을 위한 실제 값 저장
종류\크키 | 1byte | 2byte | 4byte | 8byte |
논리 | boolean | |||
문자 | char | |||
정수 | byte | short | int | long |
실수 | float | double |
- 참조형 :그 외 (String, System 등)
객체의 주소를 저장 (메모리 주소) , 크기 - 4 byte, 8 byte
7. 타입간 변환방법
1)숫자-> 문자: 숫자에 '0' 더하기
(char)(3+ '0') -> '3'
2) 숫자-> 문자열: 숫자에 "" 더하기
3 + "" -> "3"
3) 문자->숫자: 문자에서 '0' 빼기
'3'- '0' = 3
4) 문자열->숫자: Interger.parselnt() || Double.parseDouble() 사용
Interger.parseInt("3") => 3
Interger.parseDouble("3.14")=> 3.14
5) 문자-> 문자열: "" 더하기
'3' +"" = "3"
- 연산자
1. 연산자의 종류
1) 산술연산자
+ | 더하기 |
- | 빼기 |
* | 곱하기 |
/ | 나누기 |
% | 나머지 |
2) 비교연산자
> , <, >=, <=, ==, != : 크기 대소비교
3) 논리연산자
&& , || , !, &, |, ^, ~ : and 와 or 으로 조건을 연결
4) 대입연산자
= : 우변의 값을 좌변에 저장
5) 기타
(type), ?: , instanceof : 형변환연산자, 삼항연산자 등
2. 연산자의 우선순위
[괄호] - 산술 > 비교 > 논리 > 대입 - 단항 >이항 > 삼항
대입 연산자 제외, 연산 진행방향은( 왼 -> 오 )
3. 증감연산자 ( ++ , --)
전위형 | j = ++i; | ++i; j = i; |
값이 참조되기 전에 증가시킨다. |
후위형 | j = i++; | j = i; i++; |
값이 참조된 후에 증가시킨다. |
4. 부호연산자, 논리부정연산자
1) 부호연산자 (-, +)
- : x*-1
+: x*+1
2) 논리부정연산자 (!)
data type boolean 의 값을 반대로
true <-> false
5. 형변환연산자
-형변환(casting): 변수나 리터럴의 타입을 다른타입으로 변환하는 것
-변환방법: (타입)피연산자
double d = 85.4;
int score = (int)d;
====>System.out.println(score) => 85
6. 자동 형변환
-서로 다른 타입끼리 대입 연산 시 형변환으로 타입 일치시키는 것이 원칙
-경우에 따라 컴파일러가 새략된 형변환을 자동적으로 해줌
-자동 형변환 원칙: 기존 값을 최대한 보존할 수 있는 타입으로 변환
-넓은그릇 -> 좁은그릇 : x (에러)
- 좁은그릇-> 넓은그릇 : O (자동형변환)
1 Byte 2 Byte 4 Byte 8 Byte 4 Byte 8 Byte
왼->오 : 자동형변환
오->왼 : 자동형변환 불가, 형변환 연산자 기입
float f =1234;
===> float f =(float)1234;
자동 형변환이 불가한 경우: 리터럴 값이 데이터타입(그릇) 보다 클 때
byte b = 1000
====> 에러 (자동 형변환 불가) :
incompatible types: possible lossy conversion from int to byte
// 그러나 ,,
byte b= (byte) 1000
====> 출력가능, 출력값: -24
7. 산술변환: 피연산자의 타입일치를 위해 자동 형변환되는 것
1) 두 피연산자 타입을 일치시킴 (큰 타입으로 일치)
long + int -> long + long => long
float + int -> float + float => float
double +float -> double + double =>double
2)피연산자 타입이 int보다 작은 타입이면, int로 변환(default값이 int)
: int 보다 작은 타입일 경우, 산술계산이 일어나면 overflow(손실)이 발생할 가능성이 크기때문
byte + short -> int + int => int
char+ shoart-> int+ int => int
3) 연산결과의 데이터타입은 피연산자의 데이터타입과 일치
byte a, b= 10, 20;
byte c= a+b ====>에러발생
System.out.println(c);
a+b의 결과값은 int 형인데 (자동형변환에 의해서) 명시적 형변환 없이 a+b (int) 값을 byte 라는 타입의 c에 넣으려고 했기 때문에! byte c 라는그릇은 int 를 담지 못함. 따라서 byte c에 a+b 값을 넣으려면 a+b를 byte로 수동변환해야함
byte c= a+b
====>byte c= byte (a+b)
int a = 1_000_000;
int b= 2_000_000;
long c= a*b;
System.out.println(c) = -1454759936
a*b를 long이라는 그릇에 담으려고 해도 이미 a*b의 결과값은 int*int 값인 int로 출력,
a*b결과값이 이미 int 값(-1454759936 )으로 출력된 상태이기 때문에
더 큰 그릇에 담아도 값이 변하지 않음.
따라서 원하는 결과값을 얻으려면,
a, b의 데이터타입을 long으로 미리 바꾸어야 결과값 a*b도 long으로 출력가능
====>long c= (long) a*b
8. Math.round()반올림: 소수점 첫자리 반올림 결과의 정수를 반환
long result =Math.round(4.52) ; // resutl 에 5 저장
9. 문자열의 비교: ==가 아닌, .equals() 메서드사용
- .equals() :대소문자 구분
-.equals.IgnoreCase(): 대소문자 구분x
10. 연산자 종류
1) 사칙연산자
- 피연산자가 int인 경우, "0"으로 나눌 수 없음 (에러발생)
-나누기 연산자의 피연산자가 모두 int인 경우, 연산결과도 int로 출력, 올바른 연산결과를 얻으려면 피연산자 둘 중 한쪽을 f/d로 변환해야함
10 / 4 -> 2 //소수점 이하는 버림
int int itn
10 / 4.0f ->2.5f
int float float
2) 나머지연산자: %
-왼 피연산자를 오 피연산자로 나눈 나머지 값 반환
-나누는 수 (오 피연산자)는 !=0
-정수, 실수, 음수(의경우 부호 무시)가능
-짝,홀 또는 배수검사에 사용
3)비교연산자: 결과는 true / false 중 하나
-대소비교연산자: >, <, <=, =>
-등가비교연산자: ==, !=
4)논리연산자: -&&, ||
5)논리부정연산자:!
6)조건연산자: 조건식 ? 참값 : 거짓값
if true false
7)대입연산자: 오른쪽에서 왼쪽으로 계산
가장 우선순위가 낮은 연산자
x = y = 3
<---------
- lvalue(대입연산자의 왼쪽 피연산자) / rvalue(대입연산자의 오른쪽 피연산자)
'코딩공부일지 > 자바독학' 카테고리의 다른 글
[자바혼공] 객체지향 후반부 (0) | 2022.08.24 |
---|---|
[자바혼공] 객체지향 개념 / 클래스와 객체, 매서드, 오버로딩, 생성자, 초기화 (0) | 2022.08.05 |
[자바혼공]복습 배열 (0) | 2022.08.03 |
[자바혼공] 복습, 조건문과 반복문 (0) | 2022.08.03 |
[자바혼공]자바란? / 숫자와 문자 / 변수 / 주석&세미콜론 (1) | 2022.07.18 |