- 변수 타입 및 크기, 형변환에 관한 개념
8bit -> 1byte
1bit는 이진수 1자리
1byte는 8자리
큰것에서 작은것으로 변환할때 강제 형변환 하는것. (안담기는것을 강제로... 캐스팅)
작은 타입이 큰 타입으로 가는것 어떤걸 써도 상관없는 상황.. 이런것이 자동형변환 (프로모션)
아래는 프로모션
byte -> short -> int -> long -> float -> double
float double은 실수
long이 8바이트고 float가 4바이트이지만 float를 더 큰 타입으로 본다.
따라서
byte -> short -> int -> long -> float -> double 로 표현
byte, short, int, long 은 정수
1하고 1.0하고 같은 수지만 타입은 다르다. 1은 정수 1.0은 실수
- eclipse 단축키
한줄삭제 컨트롤 + D
여러줄 삭제 블록잡고 컨트롤 + D
---------------------------------변수 타입에 관한 실습 코드---------------------------------------
package pro1;
//byte -128 ~ 127
package pro1;
//byte -128 ~ 127
public class Ex02 {
public static void main(String[] args) {
//byte타입의 변수 v1에 -128초기값 할당
byte v1 = -128;
System.out.println("v1 = " + v1);
byte v2 = 127;
System.out.println("v2 = " + v2);
//int v3 = 128; 되는상태 프로모션
//byte v3 = (byte) 128; 되는상태 캐스팅-->강제형변환
//byte v3 = 128; -->안되는 상태
//Type mismatch: cannot convert from int to byte --> 인트를 바이트로 변환할수 없다라는 뜻. 128은 바이트에 안
들어가니 int로 넣어야한다.
/*기본타입 8가지
* 정수 byte 1byte < short 2byte < int 4byte < long 8byte
* 실수 float 4byte < double 8byte
* boolean():true, false 1byte
* char 2byte
*/
//char타입의 변수 c1에 'A' 할당
//char타입의 변수 c2에 'a' 할당
//char타입의 변수 c11에 'ㄱ' 할당
System.out.println("-----------------");
char c1 = 'A';
int v0 = (int)c1;
char c2 = 65; // A 아스키 코드로 사용, 캐릭터는 10진수 16진수로 처리되기 때문에 정수를 캐릭터에 넣어도
된다.(이러한 아스키코드값을 알아두면 좋다.)
char c11 = 'a';
char c12 = 97; //a 아스키 코드로 사용, 캐릭터는 10진수 16진수로 처리되기 때문에 정수를 캐릭터에 넣어도
된다.(이러한 아스키코드값을 알아두면 좋다.)
char c21 = 'ㄱ';
System.out.println("c1 = " + c1);
System.out.println("(int)c1 = " + (int)c1); // 캐릭터 타입에 A인 문자가 들어가 있지만 int형으로 강제 형변환
하여 아스키코드값에 해당하는 65출력
System.out.println("(int)c1 = " + v0); // 위와 동일 한 65출력 위에 변수v0에 강제 형변환된 c1을 저장해놨기
때문에 v0출력해도 된다.
System.out.println("c2 = " + c2);
System.out.println("(int)char = " + (int)c2); //캐릭터 값에 해당하는 아스키코드가 있지만 굳이 정수타입으로 보고
싶다고 뜻하는 강제 형변환
System.out.println("c11 = " + c11);
System.out.println("c12 = " + c12);
System.out.println("c21 = " + c21);
//특히 아스키코드 대문자 숫자에 +32를 하면 소문자로 변환된다.
int i1 = 65;
char i2 = (char)i1; //int타입 변수 i1의 값을 char타입 변수에 저장
System.out.println("i2 = " + i2); //A 라고 캐릭터형으로 출력!!!
//연산식에서 자동타입변환(p.57~59) int+int=int, short+int=int 이것은 쇼트가 인트로 자동타입변환되어 인트화
된다.인트에 넣으면 된다.
//즉 int보다 작은 byte, short, char, int 은 모두 int화되는 자동형변환된다. 이것이 +=/*% 등과 같은 연산에서만
이런 동작을 한다. --->인트가 기준... 이 연산시에 인트보다 작으면 모두 인트로 강제 형변환
System.out.println((char)i1+32); //A+32 //char(2byte)+int(4byte) 이럴땐 캐릭터가 인트보다 작아서 더 큰 인트
형태로 자동 형변환되어 int+int가 되어버린다.(이것이 프로모션) 즉 65+32가 되어버려서 97 출력
System.out.println((char)(i1+32)); // 따라서 위와같이 자동형변환되지 않으려면 괄호로 묶어야한다.
출력 a (i1+32) -> 65+32 -> 97 -> (char)97 -> a
System.out.println((char)(i2+32)); //이렇게 해도 되긴하는데 이건 내가 그냥 해본것 a출력
//즉 int보다 작은 byte, short, char, int 은 모두 int화되는 자동형변환된다. 이것이 +=/*% 등과 같은 연산에서만
이런 동작을 한다. --->인트가 기준... 이 연산시에 인트보다 작으면 모두 인트로 강제 형변환
byte b1=1;
byte b2=2;
//b1+b2의 결과는 어떤 데이터타입 변수에 저장 할 것인가?
int result1=b1+b2; // + 연산에서 int보다 작은 바이트는 int로 자동 형변환되어 int+int 연산이므로 최소 int로 선언
해야한다.
System.out.println("result1 = " + result1);
long result2=b1+b2; // int이상인 데이터 타입에 저장가능하다.
System.out.println("result1 = " + result2);
float result3=b1+b2; // int이상인 데이터 타입에 저장가능하다.
System.out.println("result1 = " + result3);
double result4=b1+b2; // int이상인 데이터 타입에 저장가능하다.
System.out.println("result1 = " + result4);
}
}
---------------------------------반복문, 조건문에 관한 실습 코드 if, for---------------------------------------
package pro1;
/* for반복문
* for(초기화; 조건; 증감식){
//조건만족시 반복실행코드
}
*/
//조건문-if문, else if문
/*if문
* if(조건){
//조건만족시 실행코드
*/
public class Ex03 {
public static void main(String[] args) {
//10 9 8 7 6 출력
//int i=10; //전역변수라서 다른곳까지 모두 영향을 주기 때문이다. 따라서 다른것으로 선언
int a=10;
for( ; ; ) {
if(a>5) {
//실행코드
System.out.println(a);
a--;
}else{
//a>5 조건만족x 실행코드
System.out.println("else 안");
break;//for 반복문 종료
}//if끝
System.out.println("if밖이면서 for안");
}//for끝
System.out.println("---");
//5 4 3 2 1 세로 출력
for(int i=5; i>=1; i--) { // i>=1 or i>0
System.out.println(i);
}
System.out.println();
System.out.println("---");
for(int i=0; i<=4; i++) { // i<=4 or i<5
System.out.print(i+" ");
} //0 1 2 3 4 가로 출력
//로컬변수 이기 때문에 똑같이 i를 사용해도 무방.
System.out.println();
System.out.print("\n"); //이렇게 해도 무방
System.out.println("---");
for(int i=1; i<=5; i++) { //첫 실행 할 때 조건문 만족 시(true) 증가식을 실행하지 않고 밑에 실행코드 실행
System.out.println(i+"번째 실행");
}
System.out.println("for밖");
//System.out.println(i);
//이 영역에서는 i를 알 수 없다. i cannot be resolved to a variable
//for구문을 벗어나면 i를 인식 할 수 없다.
for(int i=5; i>=0; i--) {
for(int j=1; j<=i; j++) {
System.out.print("★");
}
System.out.println();
} //내가 그냥 해본 것 --> 역 삼각형 별
}//main()메소드 끝
}//class 끝
---------------------------------반복문, 조건문에 관한 실습 코드 for, while, do while---------------------------------------
package pro1;
//반복문-for, while, do while
/* for반복문
* for(초기화; 조건; 증감식){
//조건만족시 반복실행코드
}
*/
/*while문
* while(조건){
/조건만족시 반복실행코드
}
*/
public class Ex04_while {
public static void main(String[] args) {
for(int i=1; i<=5; i++) {
System.out.println(i);
}
System.out.println("================");
// 11 12 13 14 15 출력
int i = 11; //지역변수는 무조건 초기값을 주어야 한다. 대신 전역변수는 안줘도 된다. 이것을 변수 초기화라 한다. 이니셜라이즈
while(i<=15) {
System.out.println(i);
i++;
}
System.out.println("================");
int a = 21; //지역변수는 무조건 초기값을 주어야 한다. 대신 전역변수는 안줘도 된다. 이것을 변수 초기화라 한다. 이니셜라이즈
while(a<26) { //(a!=26) 26과 같지 않을때 라는 뜻, true 무조건 돌게하는것(안에 조건문이 26<26이 되면 false가 된다.)
if(a<26) { //(a!=26), a<26
System.out.println(a);
a++;
}else {
break;
}
}
System.out.println("종료");
}
}
'java' 카테고리의 다른 글
22.10.31 논리연산자, 증감연산자, 다중for문, 배열, ==, equals. (0) | 2023.02.12 |
---|---|
22.10.28 for, do-while, break, switch, 삼항연산자 (0) | 2023.02.12 |
22.10.26 클래스, 필드, 메소드, 전역변수, 지역변수 그 외 기본 개념 (0) | 2023.02.12 |
22.10.25 java 환경변수 설정 및 메모장 코딩 (0) | 2023.02.12 |
22.11.15 collection (0) | 2022.11.16 |