자바에서 정수형의 기본타입은 int 이다.
그러므로 정수형의 값이 -2,147,483,648 ~ 2,147,483,647 범위를 벗어난 것이라면 반드시 숫자뒤에 소문자 l 또는 대문자 L 을 붙여야 한다.
byte kor;
byte eng;
byte math;
int total = kor + eng + math;
// int total = (int)kor + (int)eng + (int)math;
자바에서 그 데이터 타입이 byte 또는 short 또는 char 인 변수가 사칙연산(+ - * /)을 만나면
자동적으로 그 변수의 데이터 타입은 int로 변하게 되어있다.
그래서 short 타입인 total 변수에는 int 타입의 값을 담을 수가 없다. => 형변환 해야한다.
short total = (short)(kor + eng + math);
!! 주의할 점 !!
명시적 형변환을 하더라도 자체의 타입이 아예 변경이 되거나, 값이 변경되지 않음.
int value = (int)doubleValue;
이 경우에 doubleValue의 값이 1.5인데도 int로 변환되면서 1으로 찍히는데, int로 변환되면서 1로 찍히는 것 뿐이지 1.5 자체의 값은 변환이 되지 않는다.
변수의 값은 대입연산자(=)를 사용해서 직접 대입할 때에만 변경 된다. 자바는 항상 변수의 값을 복사해서 대입한다.
<중요 point>
1. 작은 크기를 큰 크기에 담으려고 하면 꼭 수동 형변환(캐스팅)이 필요하다. <-> 반대로 큰 크기를 작은 크기로 담을 때에는 자동으로 형변환된다.
2. 같은 타입끼리의 계산은 같은 타입의 결과를 낸다.
ex) int+int = int , double+ double= double
정수/실수 || 실수/실수 = 실수
(double)10/4 = 2.5;
(float)10/4 = 2.5;
float(4byte) : 단정밀도 소수점이하 7자리까지 표현됨. 135.3246235
double(8byte) : 배정밀도 소수점이하 15~16자리까지 표현됨. 135.3246234502345642
-- 자바에서 실수형의 기본타입은 double 이다.
그러므로 실수값을 float 형태로 나타내기 위해서는 실수뒤에 반드시 소문자 f 또는 대문자 F를 붙여야 한다.
만약 정수형 타입 계산인데, 실수로 표현하고 싶을 때는>
double avg4 = (double)total/3;
float avg3 = total/3.0F; //플롯/ 뒤에 F
자바에서 정수는 기본적으로 int 타입이므로 long 타입으로 나타내려면 숫자 뒤에 L 또는 l을 쓰면 된다.
long money = 30000000000L;
소수점 이하의 값까지 산출 결과로 얻고 싶을 경우
=> 피연산자를 실수타입으로 강제 타입 변환(캐스팅) 한 후 산술 연산
ex) double result = (double)int1 / int2;
* */
char : 자바는 유니코드 체계를 사용(unicode는 언어, 숫자, 특문 등 모든 글자들을 표현한다) 하므로 문자형 타입인 char 는 2byte 이며, 범위는 0 ~ 65535 이다.
그래서 char 타입에는 문자 1개 또는 숫자(0~65535)도 올 수 있다.
UNICODE 표 참조
http://www.tamasoft.co.jp/en/general-info/unicode.html
=== !!! 꼭 기억하기 !!! ===
int(4byte) 아래의 크기인 byte(1byte), short(2byte), char(2byte) 타입이
사칙연산(+ - * /)을 만나면 자동적으로 int 타입으로 자동 형변환이 발생된다.
'A' => 65 'a' => 97
'B' => 66 'b' => 98
'C' => 67 'c' => 99
'대문자' + 32 => 소문자에 해당하는 숫자
'소문자' - 32 => 대문자에 해당하는 숫자
'0' => 48
'1' => 49
'2' => 50
'9' => 57
' ' => 32
char ch1 = 'A';
System.out.println(ch1); // A
System.out.println(ch1+0); // 65
System.out.println(ch1+32); //97(사칙연산)
System.out.println((char)(ch1+32)); // a(97에 해당하는 문자)
char ch2 = 'a';
System.out.println((char)(ch2-32));// 97 - 32 = 65 -> A
-- 크기가 1byte 이다.
--> 메모리상에 저장되어진 객체(인스턴스)의 **메모리 주소를 참조**하는 것이다.
예: Member mbr = new Member();
--> 참조형 타입(Reference Type)은 메모리상에 크기는 4byte 를 차지한다.
<변수의 명명규칙>
- 변수명의 길이에는 제한이 없다.
- 대,소문자 구분이 있다.
- 첫글자는 숫자는 안된다.
- 특수문자는 '_' 와 '$' 만 사용이 가능하다.
- 예약어(예 package, import, public, class, String, int, float ...)는 변수명으로 사용불가하다.
- <권장사항이지 규칙은 아니다> 첫글자는 소문자로 시작하고, 단어와 단어가 결합된 경우이라면 두번째 단어부터 대문자로 시작하는 카멜기법을 사용하든지 또는 단어와 단어 사이에 _ 를 넣어주는 스네이크법을 사용한다.
자바에서 그 데이터 타입이 byte 또는 short 또는 char 인 변수가 사칙연산(+ - * /)을 만나면
자동적으로 그 변수의 데이터 타입은 int 로 변하게 되어있다!!!!
즉, int total = kor + eng + math; 은
int total = (int)kor + (int)eng + (int)math; 으로 되어진다.