포장 류 와 기본 데이터 유형의 차이

5900 단어 자바 이론
포장 류
장점:
  • null
  • 로 할당 할 수 있 습 니 다.
  • 은 parseInt (String s), tostring (), valueOf (String s), equals (object object), i. compareto (integer anotherInter)
  • 등 일련의 방법 을 제공 했다.
  • 집합 중 기본 데이터 형식 을 넣 을 수 없고 포장 류 만 넣 을 수 있 습 니 다!

  • 단점:
  • 각 값 이 각각 대상 에 포장 되 어 있 기 때문에 Array List 의 효율 은 int [] 배열 보다 훨씬 낮다. (그 구조 로 소형 집합 을 해 야 한다. 그 이 유 는 프로그래머 의 조작 편의 성 이 집행 효율 보다 더 중요 하기 때문이다.
  • 기본 데이터 형식
    장점:
  • 계산 효율 이 높다
  • 상수 탱크 로 인해 크기 의 오 류 를 일 으 키 지 않 습 니 다
  • 단점:
  • 데이터베이스 에서 결과 집합 에 봉 인 된 값 을 조회 할 때, 어떻게 되 돌아 오 는 값 이 null 일 때, 결 과 를 필드 에 부여 하고, 실행 할 때 오 류 를 보고 하 며, null 값 을 기본 데이터 형식 에 부여 할 수 없습니다.

  • 둘 의 차이:
    1. 성명 방식 이 다 르 고 기본 유형 은 new 키 워드 를 적용 하지 않 으 며 포장 유형 은 new 키 워드 를 사용 하여 더미 에서 저장 공간 을 분배 해 야 합 니 다.2. 저장 방식 과 위치 가 다 르 기 때문에 기본 적 인 유형 은 변 수 를 스 택 에 직접 저장 하 는 것 이 고 포장 유형 은 대상 을 쌓 아 놓 은 다음 에 인용 을 통 해 사용 하 는 것 이다.3. 초기 값 이 다 르 고 기본 유형의 초기 값 은 int 가 0 이 며 boolean 은 false 이 며 포장 유형의 초기 값 은 null 4 이 고 사용 방식 이 다 르 며 기본 유형 은 직접 할당 하면 됩 니 다. 포장 유형 은 Collection, Map 과 같이 집합 할 때 사 용 됩 니 다.5. 포장 류 는 모두 Number 인 터 페 이 스 를 계승 하여 Compareble 인 터 페 이 스 를 실현 한다.
    자동 포장 과 자동 분해
    자바 에서 데이터 형식 은 두 가지 로 나 눌 수 있 습 니 다. Primitive Type (원본 형식) 과 Reference Type (참조 형식) 입 니 다.기본 형식의 수 치 는 대상 이 아니 며 대상 의 toString (), hashCode (), getClass (), equals () 등 방법 을 호출 할 수 없습니다.
    자동 포장 은 자바 가 자동 으로 원본 형식 값 을 대응 하 는 대상 으로 바 꾸 는 것 이다. 예 를 들 어 int 값 을 Integer 대상 으로 바 꾸 는 과정 을 포장 이 라 고 한다.반대로 Integer 대상 을 int 값 으로 바 꾸 는 과정 을 해체 라 고 합 니 다.이곳 의 포장 과 분해 상 자 는 자동 으로 진행 되 는 비인간 적 인 전환 이기 때문에 자동 포장 과 분해 라 고 부른다.
    자동 포장 및 분해 사용 장면
    자동 으로 상 자 를 포장 할 때 컴 파일 러 는 value Of 를 호출 하여 원본 형식 값 을 대상 으로 변환 하고, 자동 으로 상 자 를 분해 할 때 컴 파일 러 는 intValue (), doubleValue () 등 과 유사 한 방법 으로 대상 을 원본 형식 값 으로 변환 합 니 다.
    /**     **/
    ArrayList intList = new ArrayList();
    intList.add(1); //autoboxing -> primitive to object
    intList.add(2); //autoboxing
    
    ThreadLocal intLocal = new ThreadLocal();
    intLocal.set(3); //autoboxing
    
    int number = intList.get(0); // unboxing
    int local = intLocal.get(); // unboxing in Java
    
    /**       **/
    public static Integer show(Integer iParam){
        System.out.println("autoboxing example - method invocation i: " + iParam);
        return iParam;
    }
    
    //autoboxing and unboxing in method invocation
    show(4); //autoboxing
    int result = show(4); //unboxing because return type of method is Integer
    

    자동 포장 및 분해 주의 점
    1. 쓸모없는 대상 생 성 을 피하 고 GC 압력 을 증가 시 키 며 한 순환 에서 자동 포장 작업 을 합 니 다. 불필요 한 대상 을 만 들 고 프로그램의 성능 에 영향 을 줍 니 다.
    Integer sum = 0;
    for(int i = 128; i < 5000; i++){
        sum += i;
    }
    

    "+" 이 조작 부 호 는 Integer 대상 에 적용 되 지 않 습 니 다. 먼저 sum 은 자동 으로 상 자 를 뜯 는 작업 을 하고 수치 추가 작업 을 하 며 마지막 으로 자동 포장 작업 이 발생 하여 Integer 대상 으로 전환 합 니 다.그 내부 변 화 는 다음 과 같다.
        temp = sum.intValue() + i;
        Integer sum = new Integer(temp);
    

    성명 한 sum 은 Integer 형식 이기 때문에 위의 순환 에서 4900 개 에 가 까 운 쓸모없는 Integer 대상 을 만 들 것 입 니 다. 이 는 쓰레기 회수 작업량 을 증가 시 켜 프로그램의 성능 을 떨 어 뜨 립 니 다.따라서 우리 가 프로 그래 밍 을 할 때 변수 유형 을 정확하게 설명 하고 자동 포장 과 분해 로 인 한 성능 문 제 를 피해 야 합 니 다.2. 대상 초기 화 원본 데이터 값 과 대상 을 비교 할 때 이 대상 이 초기 화 되 지 않 거나 대상 이 null 이면 자동 으로 상 자 를 뜯 는 과정 에서 NullPointer Exception 이상 을 던 집 니 다. 코드 는 다음 과 같 습 니 다.
        private static Integer count;
    
        // NullPointerException on unboxing
        if(count <= 0){
            System.out.println("Count is not started yet");
        }
    

    3. 대상 캐 시 자바 는 기본적으로 - 128 에서 127 의 Byte, Short, Integer, Long 대상 을 캐 시 합 니 다. 만 든 대상 이 이 수치 범위 에 있 으 면 캐 시 된 대상 을 되 돌려 줍 니 다. 그렇지 않 으 면 새로운 대상 을 만 듭 니 다.Character 캐 시 범 위 는 0 ~ 127 이 고 Float 와 Double 은 자동 포장 탱크 가 없습니다.이런 디자인 은 향 원 디자인 모델 을 설 계 했 는데 상세 하 게 는 향 원 모델 을 볼 수 있다.그러나, 우 리 는 getAndRemoveCache Properties 방법 을 통 해 JDK 가 Integer 에 설정 한 캐 시 속성 을 가 져 오 거나 제거 할 수 있 으 며, 가상 컴퓨터 옵션 - XX: AutoBoxCacheMax 를 조정 하여 '자동 포장 풀' 의 크기 를 조정 할 수 있 습 니 다.4. 상대 비교
        Integer integer1 = 100;  
        Integer integer2 = 100;  
        System.out.println("integer1==integer2: " + (integer1 == integer2));// true              Integer         
        System.out.println("integer1.equals(integer2): " + (integer1.equals(integer2)));// true  
        System.out.println("integer1.compare(integer2): " + integer1.compareTo(integer2));// 0      
        Integer integer3 = 200;  
        Integer integer4 = 200;  
        System.out.println("integer3==integer4: " + (integer3 == integer4));// false        new Integer       
        System.out.println("integer3>integer4: " + (integer3 > integer4)); // false        ,       
        System.out.println("integer3.equals(integer4): " + (integer3.equals(integer4)));// true  
        System.out.println("integer3.compare(integer4): " + integer3.compareTo(integer4));// 0     
        Integer integer5 = new Integer(100);  
        Integer integer6 = new Integer(100);  
        System.out.println("integer5==integer6: " + (integer5 == integer6)); // false      Integer         
        System.out.println("integer5.equals(integer6): " + (integer5.equals(integer6)));// true  
        System.out.println("integer5.compare(integer6): " + integer5.compareTo(integer6));// 0      
        int int1 = 100;  
        System.out.println("integer1==int1: " + (integer1 == int1));// true  Integer        int    
        System.out.println("integer1.equals(int1): " + (integer1.equals(int1)));// true  
        System.out.println("integer1.compare(int1): " + integer1.compareTo(int1));// 0        
        int int2 = 200;  
        System.out.println("integer3==int2: " + (integer3 == int2));// true  Integer      int    
        System.out.println("integer3.equals(int2): " + (integer3.equals(int2)));// true  
        System.out.println("integer3.compare(int2): " + integer3.compareTo(int2));// 0   
    

    좋은 웹페이지 즐겨찾기