*자바 타입별 데이터 표현범위
* (byte 표현범위) : -128 ~ 127
- byte b = 127; // (O)
byte b = 128; // (X) 표현범위 넘어섬.
- long l =2147483648; // (X) 범위 안이지만 오류/
long l =2147483648L; // (ㅇ) long은 뒤에 L을 붙여줘야함. L을 쓰지않으면 int로 받아들인다. =>오류
- int i=100L; // (X) 접미사 L이붙으면 int타입으로 저장 가능한 숫자라 하더라도 저장불가.
- float f = 3.14f; //(O) float타입은 접미사 f 또는 F를 붙여야함.
- double d=3.14; //(O) double 기본타입이므로 접미사 없어도 잘 나옴.
- char c='A'+1; ==> B
- true = 1, false = 0 이렇게 숫자로도 표현됨.
*변수
* String 타입 : 기본형 아닌 참조형 데이터타입(Reference Type). 공백(null String)저장가능. char는 공백저장안됨.
* printf()
-출력할 형식을 미리 지정하여 원하는 형태로 데이터 출력 : (printf() 메서드의 f는 format 의 약자)
-출력할 형식을 ""큰따옴표안에 '형식지정문자'를 사용하여 형식 지정 후 우측에 콤마를 붙이고 실제 데이터를 지정함.
ex. String s1 = "Java";
String s2 = "프로그래밍";
System.out.printf("%s \n %s",s1,s2);
*오늘의 퀴즈1*
Q. 안녕하세요. 제 이름은 XXX 입니다. 제 나이는 XX 입니다. 제 키는 XXX.XX 입니다. 를 printf() 를 사용하여 표현하시오.
String name="홍길동";
int age = 200;
double height =190.9; //소숫점 2자리까지만 표시.
//tip. printf 는 + 쓰지않고 단순히 변수만 넣어서 표현할때 사용하는 점 기억하세요.
System.out.printf("안녕하세요 제 이름은 %s 입니다.", name);
System.out.printf("\n%s\n","제 나이는 "+age+"세 입니다.");
System.out.printf("제 키는 %.2f 입니다.", height);//소숫점 2째자리까지만 보여다오.
*형변환 = 타입변환(Type Casting)
- 기본형끼리의 형변환과 참조형끼리의 형변환으로 구분.
- short와 char 같의 형변환은 일어날 수 없다.
short : +-3만2천 얼마.음수존재.
char : 아스키코드, 유니코드 저장. 코드값은 음수가 없다.
- 자동형변환(long->float)는 long이 더큰데 자동형변환이 되는 이유?
long : 크기 - 8byte , 값의 범위 10^19
float : 크기 - 4byte , 값의 범위 10^38
=> flaot이 표현할 수 있는 값의 범위가 훨씬크기 때문에 자동형변환이 가능하다.
< 명시적 형변환 ( = 강제 형변환) >
:큰 데이터타입에서 작은 데이터타입으로 변환하는 경우
:반드시 형변환 연산자를 사용하여 우변의 데이터 앞에 작은 데이터 타입을 명시. 이때, overflow 때문에 다른 데이터가 저장될 수가 있다.
- byte b1=10;
byte b2=20;
byte b3=0;
b3=b1+b2; // (X). 산술이 넘쳐서 오류가 발생을 한다. byte 연산결과가 int가 되므로 b3에 저장불가.
b3=(byte)(b1+b2); // (ㅇ). 형변환을 두개다 괄호쳐주면 저장가능.
< 산술연산시 자동형변환 >
- 산술 연산전에 데이터 타입이 다르면 산술 연산을 수행하기 전 피연산자끼리의 데이터타입을 일치 시킨후 연산수행.
- 규칙1. int 타입보다 작은 타입끼리의 연산은 모두 int 타입으로 변환후 연산해야한다.
ex. byte + byte = int + int = 결과가 int
ex. char + int = int + int = 결과가 int
- 규칙2. int 타입보다 큰 타입과의 연산은 큰 타입으로 변환 후 연산.
ex. int + long = long + long = 결과가 long
ex. int + double = double + double = 결과가 double
- char ch='A';
char ch2= ch + 2; // (X) char , int 간에 형이 맞지 않으므로 오류/
char ch2= (char)(ch + 2); // (O). 결과값 : C
-long l = 200; 뒤에 L없는데 왜 오류 안나지?? int 형 범위내의 숫자에서는 식별자 L이나 l을 붙이지 않아도 괜찮다.
- long+float만나면 결과가 float 이 된다.
long l = 200;
float f =3.14f;
long l2 =l+f; //(X)
long l2 =(long)(l+f);// (O) 결과값이 float이 되므로 long으로 표현하려면 형변환을 해줘야 함.
- (double)(10/3) = 3.0
(double)10/3) = 3.3333333333333335
10/(double)3) = 3.3333333333333335
- b3=b1+b2; // (X)
b3=10+20; // (O) 변수는 뭐가 들어올지 모르니까 실행이 안되는데 상수(리터럴)끼리 하면 실행이된다. 그래서 형변환을 해 줄 필요가 없다.
b3=100+20;// (X) 대신 byte가 넘어버리는 숫자를 넣으면 아예 안된다.
< 대입연산자 >
- 대입연산자를 사용하면 명시적 형변환을 하지않아도 된다.
- short s = 10;
s=s+10; // (X) 자동형변환의 결과로 결과가 int라서 오류가 난다.
s += 10; // (O) 연산시 자동 현변환이 일어나지 않는다.그래서 오류가 나지않음.
'자바스프링웹공부(2024) > 자바' 카테고리의 다른 글
2024.08.02. 반복문( for문, 중첩for문 ) (0) | 2024.08.02 |
---|---|
2024.08.01. 반복문(Loop) - while문, 중첩 while문 (0) | 2024.08.01 |
2024.08.01. 조건문(중첩 if문, switch_case, ) (0) | 2024.08.01 |
2024.07.26. 연산자 (0) | 2024.07.26 |
2024.07.23. 자바공부 (0) | 2024.07.25 |