기본타입 이어서~!01/28 데이터 참조!!!
Wrapper Class
=> char -> Character로 변경된다. Boxing
=> char('2') -> Character[]
17). 기본타입의 형변환
-
형태의 형변환 / 크기의 형변환
-
Promotion, Casting
-
(type) : 캐스팅 연산자
Promotion : 1byte -> 4byte : 작은 타입에서 큰타입으로 변경
ex). byte b =10;
int c =b; // 그냥 사용
Casting : 4byte -> 1byte : 큰타입에서 작은타입으로 변경
ex). int c =100;
byte e = (byte)c; //형변환 필요
ex). TypeProcess Class 참조
값을 리터럴 입력하느냐 아니면 변수에 담겨있는 값을 입력하느냐 차이를 알아보자
//byte b = 128; //크기가 정수 127까지만 입력받을수 있기 때문에 오류
byte b1 = 120;
byte b2 = 100;
byte bSum = (byte)(b1+b2); //연산의 결과가 int 이기 때문에 발생하는 코드오류
System.out.println(bSum); // 예상 결과는?
//정수의 연산을 담는 변수의 타입이 실수라도 결과를 담는 것
float f1 = 10/3; //예상결과는 3 -> float 에 담기면서 3.0
System.out.println(f1);
int i =10;
float f = i;// 형태가 변화했지만 Casting 하지 않았다.
System.out.println(f);
double d = f; //크기에 대한 형변환 / 큰거->작은 Promotion
System.out.println(d);
//실수의 기본 리터럴 크기는 double이다. 따라서 0.0f로 작성하여 리터럴의 크기가 float의 리터럴 임을 지칭해야한다.
float ff = 0.0f;
//크기 형변환 double->float
float floatCasting = (float)d;
//실수의 연산
//연산자를 제외하고 하나의 실수 타입을 가지고 있는 리터럴이 있다면 실수 연산이 발생된다.
int ic = 10; //10
float fc = 20; //20.0
//문제 : Casting연산자를 안붙인게 정수가 Promotion이 발생해서 입력된건가? 오답~~!
//아니면 타입이 실수인 변수가 있기 때문일까? : 정답~~~!
//int intCal = fc/ic;
float floatCal = fc/ic;
double dd = 1/2; //연산의 결과가 실수이기 때문에 결과는 자동으로 Promotion이 발생하여 double로 변경됨
//double dCal = 1.0/2.0; //둘다 실수로 표시되거나 둘중 하나라도 실수로 표기되면 가능
//double dCal = 1.0/2;
//float dCal = 1.0/2; // 리터럴이 실수(double)이라면 결과는 실수 연산의 결과인 double로 나온다.그래서 오류가 뜸(기준은 double이니)
//double dCal = 1/2.0;
//double dCal = (float)1/2;
//double dCal = 1/(double)2;
//double dCal = (double)1/2;
float fg1 = 1.6f;
float fg2 = 0.8f;
float fCal = fg1/fg2;
double dg1 = 1.6;
double dg2 = 0.8;
// float dgCal = dg1/dg2; //변수의 크기가 double
double dgCal2 = dg1/dg2;
//실수의 연산은 큰 크기의 타입의 결과가 나온다.
double tg1 = 1.6;
float tg2 = 0.8f;
// float tgCal1 = tg1/tg2;
double tgCal2 = tg1/tg2;
//----------------------------------------------------
byte bLimit = (byte)128; // 결과값 : -128
[Type의 크기 확인]
public static void type크기() {
//기본 타입은 같은 값을 저장할 수 있는 공간을 제공 1:1로 대응한다(boxing unboxing)
System.out.println(Byte.MAX_VALUE+":"+ Byte.MIN_VALUE);
System.out.println(Long.MAX_VALUE+":"+ Long.MIN_VALUE);
System.out.println(Double.MAX_VALUE+":"+ Double.MIN_VALUE);
18).형변환 예시문제
ex).Example+Type
Boxing unboxing
19).String 1탄
-
객체
-
new를 하지 않아도 객체가 됨, 하지만 new를 한 객체와 그냥 선언한 객체는 다르다.
-
특징은 참조타입이지만 성질은 기본타입이다.
-
""로 생성하며 문자열의 값은 문자형이 조합되어있는 형태
-
String과 연산(+)을 처리하면 모두 보이는 그대로 문자열로 변경이된다. = String concatenate
** 많이 사용하는 메소드
-
String.valueOf(); //입력된 아규먼트 값을 문자열로 변경한다.
=3.14+""; ->"3.14" 많이 쓰면 메모리가 많이 차지한다.
=String.valueOf(3.14); -> "3.14"
출력 (Print)
-
System.out.print(); : 출력을 하고 가로로 이어진다.(argument가 필수다)
-
System.out.println(); : 출력하고 한줄 내림 (argument 필수아니다.)
-
System.out.printf(); : 출력시 binding을 통한 문자열 생성
=> ex). %s : 문자열 , %d : 숫자 , %f : 실수 , %n : 한줄 내림
System.out.printf("문자 %s, 숫자 %d, 실수 %f","한글",1,3.14);
20). Escape 문자
-
문법에 의해서 Compile되지 않고 사용하는 문자
-
html 에서 Entity Tag와 유사하다 <는 -> < 로 사용한다.
-
\t : tab , \n : 한줄 내림nextLine , \" : 값을 String으로 처리
-> System.out.print("한글"); -> 한글
-> "한""글"로 바꾸고 싶다면? -> System.out.print("\"한\"\"글\"")
**문제 : Hello 문자열을 -> HELLO로 변경하는 메소드를 작성하세요
ex). for문 , *charAt(), concatenate , char연산, 대문자 A는 65, B는66이다.소문자 a는 97 b는 98
21).for문 <-> 무한반복문(while)
-
초기값, 조건, 증감이 있는 선택 반복문
for (int i=0; i<3; i++) {연산}
예약어 1.초기값 2.조건 3.증감 4.연산
5.하고 마지막 2.조건에서 끝난다.{}밖으로 나감.
<debug표>------------------------------------
초기값 판단 연산 증감
.....
i=0 true 연산1 0
i=1 true 연산2 1
i=2 true 연산3 2
i=3끝!!! false
(최종 i값은 3임으로 조심해야된다!!)
-------------------------------------------------
**Test
-
debug :
-
JUnit : 메서드 만들어놓고 값하나 던져서결과가 잘돌아가는지 (단위테스트)
22). 증감연산자
-
int i =0;
-
System.out.println(i++); //0 선처리 후증가
-
System.out.println(i++); //1
-
System.out.println(++i); //3 선증가 후처리
-
System.out.println(++i) //4
-
System.out.println(i--);; //4 선처리 후감소
*별찍기 for문
5.하고 마지막 2.조건에서 끝난다.{}밖으로 나감.
<debug표>------------------------------------
초기값 판단 연산 증감
i=0; t t 0+1 모양 증감
i=1 true 연산2 1
i=2 true 연산3 2
i=3끝!!! false
(최종 i값은 3임으로 조심해야된다!!)
-------------------------------------------------
'Java > Basic' 카테고리의 다른 글
[Java-Basic] Reflection API 를 사용하여 Custom Annotation 만들기 (0) | 2021.01.22 |
---|---|
[Java] scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); 란? (0) | 2021.01.22 |
[Java] 초보 가이드 -3 (0) | 2021.01.04 |
[Java] 초보 가이드 -2 (0) | 2020.12.30 |
[Java] 초보 가이드 -1 (0) | 2020.12.30 |