210414_2~4 (Data형, 작명법, 객체변수, 연산방향/순위, 형변환)
데이타형 data type : 미리 약속한 메모리 크기
1bit unsigned
8bit ==> 1 byte 2^8 ==> 256 ===> 0~ 255 X => -128~0 ~ 127
boolean 블리언 | True/False | 1byte |
char | 유니코드 문자 지원 | 2byte |
byte | 정수 | 1byte |
short | 정수 | 2byte |
int | 정수 | 4byte |
long | 정수 | 8byte |
float | 실수(소수점) | 4byte |
double | 실수 | 8byte |
할당 받은 메모리 영역보다 더 큰 데이타가 입력되면 안된다.
(무엇을 의미하는거였지..)
println ( "문자열" + var )
111 <== 10진수
011 <== 8진수
0x11 <== 16진수
지수 : 수가 너무길어서 표현 자릿수가 부족할때 사용한다.
10E34 <- 0이 34개 붙어있다는 뜻의
데이타형 data type : 미리 약속한 메모리 크기
package chapter3;
public class ByteTest {
/**
* byte는 8bit
* -128 ~ +127
*/
// 8가지 기본형 변수 : boolean char byte short int long float double
public static void main(String[] args) {
// TODO Auto-generated method stub
byte b = 127;
// byte b1 = 128; ERROR
byte b2 = -128;
// byte b3 = -129 ERROR
System.out.println(b);
System.out.println(b2);
}
}
package chapter3;
public class Silsu {
public static void main(String[] args) {
// 실수는 기본적으로 double로 인식됩니다.
// float f = 10.5;
float f = 10.5f;
System.out.println("실수출력:"+f);
double d = 10.5;
System.out.println("더블형 실수 출력: " + d);
}
}
package chapter3;
public class Integer_Test {
public static void main(String[] args) {
System.out.println("정수형 상수 예제");
System.out.println("10진수 26 10진수로:" +26);
System.out.println("8진수 26 10진수로:"+-26); //숫자0은 8진수
System.out.println("16진수 AB는 10진수로"+0xAB); // 0x 16진수
}
}
package chapter3;
public class Float_Test {
public static void main(String[] args) {
System.out.println("실수형 상수 예제");
System.out.println("양 실수 12.345:" + 12.345);
System.out.println("음 실수 - 12.345 :" + -12.345);
//12.34E3 == 12.34E+3 == 12.34 * 1000
System.out.println("지수 표현 12.34E:" + 12.34E3);
// 12.34E-3 == 12.34E-3 == 12.34 / 1000
System.out.println("지수표현 12.34E-3 : " + 12.34E-3);
}
}
자바부수적 설명
미리 작명된 이름 : 예약어 if while for ... 즉 예약어는 변수로 사용불가
작명법 : 이름(클래스, 메서드, 변수 ...) 짓는법
이름에 길이 제약이 없다. 가능하면 충분하게 의미 전달되도록 길게 이름을 짓는 경향이 있다. <=== 추상 개념
-클래스 : 첫자는 대문자로 시작 HelloWorld (o) helloworld (X)
마디마디 대문자, 아니면 _로 연결 (파스칼기법, 카멜기법)
-메서드 : 첫자는 소문자로 시작
마디마디 대문자, 아니면 _로 연결
-변수명 : 이름에 길이 제약이 없다 / 숫자로 시작 불가 / 이름에 의미를 담는다 / 예약어 사용 불가
특수문자는 _ $ 만 사용가능
데이터형 변수명 ; 기본형으로 만든 변수
int a;
char n ; 문자
클래스 객체변수 클래스로 만든 변수
String str1 = "My name is";
"My name is"의 값은 정체가 뭘까요?
"My name is" <=== 문자열 상수
1234 <====== 정수 상수
int a = 99; a (4byte 메모리영역) 에 99를 대입한다
String srt1 = "My name is";
암기 : 객체변수는 크기가 언제나 4 Byte이다.
===>"My name is"를 str1에 직접 대입한것이 아니다
상수 영역에 "My name is"이 있는 곳의 주소(address)를 가공(hashcode화)해서 레퍼런스값(4byte 정수)으로 전환한 후 그 페러런스값(hashcode값)을 대입한 것이다.
즉, 값을 직접 대입하는 것이 아니라, 레퍼런스값을 대입하여 간접적으로 값을 가리키게 된다.
package chapter3;
public class String_Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String srt1 = " My name is";
String srt2 = " 강남";
String srt3 = " 멋장이";
String srt4 = " 정말";
System.out.println("문자열형 상수 예제");
System.out.println("--------------");
System.out.println(srt1 + srt2 + srt3 +srt4 +100 + 200);
System.out.println(100+ 200 + "종로" + 100 + 200);
}
}
System.out.println(100 + 200 +"종로" +100 + 200) ->300종로100200
문자열 뒤로 따라오는 정수는 문자열화되어있다.
System.out.println( 100+200 +"종로" +(100 + 200)) ->300종로300
연산방향
a + b ---->
c = k <----
( ) <==최우선연산자
우선순위
연산(+)>대입(=)
package chapter3;
public class Variable_Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 1234;
int j = 5678;
int hap = 0;
hap = i + j;
// 200 = i + j;
System.out.println("변수를 이용한 예제");
System.out.println("i = " + i);
System.out.println("j =" + j);
System.out.println("hap = :" + hap);
i= i+j;
System.out.println("i = i +j =>" + i);
}
}
형변환
큰변수 <====== 작은값 // 오토캐스팅
작은변수 <===== 큰값 //ERROR
억지로 담으려면 형변환이 필요하다 -> 캐스팅(casting)한다.
이때는 ( ) 가 형변환 연산자
변수 = (형) 값
주의 : 캐스팅하여 값이 손실이 일어나면 캐스팅하여 사용하면 안된다.
package chapter3;
public class Cast_Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 1234; // 4Byte 정수
int k; // 4Byte 정수
float f = 10.5f; // 4Byte 실수 , 정수
double d = 100.55; // 8Byte 실수, 정수
// k= f; // k는 정수만 저장함으로 ERROR
k = (int) f; // 작은타입 = (작은타입)큰타입
System.out.println(k); // 정수화되서 0.5가 잘림=10
f = i; // 실수형 = 정수형 f = 1234 / int는 float에 담길수있다
System.out.println(f); // 1234.0
f = (float) d; // double이 더 큰타입
System.out.println(f); // 100.55
}
}