boxing
: 기본자료형 -> 객체타입
unboxing
: 객체타입 -> 기본자료형
(컴퓨터가 대부분 알아서 처리를 해준다.)
package com.bit.day09.am;
public class Ex05 {
public static void func(Object obj){
System.out.println("출력" +obj );
}
public static void main(String[] args){
Ex05 me= new Ex05();
func("abcd"); //모든 클래스는 object클래스를 상속받으므로 가능하다.
func(false); //내부에서 알아서 boxing, unboxing을 하기 때문에 가능한 것이다.
func(me); //toString으로 나옴
//참조변수가 아닌 기본 자료형을 인자로 전달했는데 어떻게 가능할까?
//기본자료형 != 객체, 그렇다면 object클래스를 상속받지 않는다는 건데 어떻게 가능?
//자바는 객체지향언어인데 왜 기본자료형을 쓰냐 --> 객체타입이 있음 - Wrapper class
Boolean boo; // 객체 타입.
}
}
단, 반드시 참조변수로만 넣어줘야하는 상황에서는 래퍼클래스를 이용하여 변환해줘야 한다.
Integer class
package com.bit.day09.am;
public class Ex05 {
public static void main(String[] args){
//생성자
int su1=1234;
Integer su2=1234; //int 객체화 - boxing이 자동적으로 일어난다.
// Integer su3=new Integer(); //default 생성자가 없어서 인자 없이 객체생성이 안됨.
Integer su3=new Integer(su1);
System.out.println(su3+1); //객체+int 연산 --> unboxing이 일어난다. 기본자료형끼리 연산하여 보여준다.
Integer su4=new Integer("4321"); //주의 : 숫자로만 구성돼있어야 한다.
System.out.println(su4+1); //4322 출력. 문자열->숫자로 바꿔 연산.
//단, 바뀐 숫자는 Integer 타입이다.
//문자열을 가지고 Integer로 숫자연산을 할 수 있다.
//필드
System.out.println(Integer.MIN_VALUE); //int의 표현범위 min, max가 나온다.
System.out.println(Integer.MAX_VALUE); //MIN,MAX는 상수형(final) 변수 = 전체를 대문자로만 저장.(바뀌면 안되니까)
System.out.println(Integer.SIZE); //32bit 출력
System.out.println(Integer.BYTES); //4바이트 출력
//메소드
System.out.println(su2.equals(su3)); //true 출력
//object클래스의 euquals는 객체비교 - 객체가 다르면 주소값이 다른 것인데 왜 true?
//-- value값 비교를 할 수 있도록 오버라이딩 해놓았기 때문에.
Integer su5=new Integer(129);
System.out.println(su5.byteValue()); //-127출력. byte로 변환
int su6=10; //진법변환 메소드, 이들의 리턴값은 문자열이다.
System.out.println("2진수" + Integer.toBinaryString(su6));
System.out.println("8진수" + Integer.toOctalString(su6));
System.out.println("16진수" + Integer.toHexString(su6)); //16진수a 출력
}
}
Double class
package com.bit.day09.am;
public class Ex06 {
public static void main(String[] args) {
double su1=3.14;
Double su2=3.14;
Double su3=new Double(su2);
Double su4=new Double("3.14");
double su5=Double.parseDouble("3.14");
double su6=0.0/1.0;
double su7=1.0/0.0; //infinity , 0에 수렴할수록 값이 커진다.
System.out.println(Double.isInfinite(su7)); //infinity값은 true 나온다.
double su8=0.0/0.0;
System.out.println(su8); //NaN 출력
System.out.println(Double.isNaN(su8)); //true 출력.
//이와 같은 상황을 만들지 않기 위해 isFinite 이용하여 검사할 수 있다.
}
}
Boolean class
package com.bit.day09.am;
public class Ex07 {
public static void main(String[] args) {
boolean boo1=true;
Boolean boo2=true;
Boolean boo3=new Boolean(boo1);
Boolean boo4=new Boolean("true"); //문자열은 true를 출력
System.out.println(boo1); //객체출력인데 toString()을 이용하여 변환해서 보여주는것이다.
}
}
Character class
package com.bit.day09.am;
public class Ex08 {
public static void main(String[] args) {
// is 메소드 : ~이냐? (검사기능) -- 모두 true/false 형태로 출력된다.
char ch1='가';
Character ch2='A';
Character ch3=new Character(ch1);
System.out.println(Character.isAlphabetic(ch1)); //문자면 true반환 jdk1.7
System.out.println(Character.isLetter(ch1)); //위와 동일한 메소드 jdk1.5
System.out.println(Character.isUpperCase(ch2)); //대문자인지
System.out.println(Character.isLowerCase(ch2)); //소문자인지 둘중에 하나가 true가 나오면 영문자.
System.out.println(Character.isDigit(ch1)); //숫자면 true
//숫자도, 알파벳도 아니면 특수문자일 것이다.
System.out.println(Character.isWhitespace(ch1)); //띄어쓰기인지 검사 (최신ver)
System.out.println(Character.isSpace(ch1)); //eclipse 기능:이런식으로 줄이그어지는 건 새로운걸 쓰라는 얘기.
}
}