program story

사용할 것, int 또는 Integer

inputbox 2020. 12. 14. 08:10
반응형

사용할 것, int 또는 Integer


데이터베이스에서 검색된 레코드를 저장하는 데 사용할 데이터 전송 개체를 만들어야합니다. 이 데이터 전송 개체에서 숫자 필드를 선언해야합니다. 더 나은 것을 위해 -int 또는 Integer

필드를 Integer로 정의하는 경우 DB에서 2000 개 이상의 레코드를 검색 할 경우 'Integer'유형으로 인해 성능에 영향이 있습니까?

미리 감사드립니다.


Integer처리 할 수 ​​있으므로 더 나은 옵션입니다 null. 을 위해 int, null될 것입니다 0, 조용히, 경우 resultSet.getInt(..)에 사용됩니다. 그렇지 않으면 " null기본 속성 으로 설정할 수 없습니다"와 같은 예외가 발생할 수 있습니다 .

여기서 성능은 거의 중요하지 않습니다.

  • 를 선택 int하면 추가 처리 코드가 추가됩니다. 그리고 그것은 당신에게별로 도움이되지 않을 것입니다. 당신의 코드는 깨끗하고 간단하지 않을 것이며, 많은 상용구 코드는 성능을 얻지 못할 것입니다.
  • 데이터베이스의 경우 null은 0과 같지 않습니다. 때로는 의도 한 0곳에 를 입력하게 null됩니다. 사용자가 양식을 제출했지만에 대한 값을 제공하지 않는 경우를 상상해보십시오 int. 0기본적으로 얻을 수 있습니다. 해당 필드가 not null데이터베이스에 있을 때 의미가 있거나 실제로 그렇게 합니다.

성능 비용보다는 객체가 수행해야하는 작업을 기반으로 실제로 결정을 내려야합니다. 성능에 기반한 결정은 모든 악의 근원 인 프로파일 러로 속도 문제가 확인되면 수행되어야합니다.

두 가지 기능 중 일부를 살펴보고 결정에 사용하십시오.

  • Integer할 수있다 null, int할 수 없습니다. 그래서입니다 intDB는Nullable 필드?
  • Integer클래스 메서드에 대한 액세스가 필요 합니까?
  • 당신은 산술을하고 있습니까?

개인적으로 나는 항상 래퍼보다 원시를 선택합니다. 그러나 그것은 기술적 인 장점이 아니라 선호하는 것입니다.


내 마음에 무언가를 int 또는 Integer로 선언하는 것 사이의 선택은 단순히 null이 유효한 값인지 여부에 달려 있습니다. Autoboxing (및 autounboxing)은 숫자가 단순히 한 유형 또는 다른 유형이어야하는 모든 변환 문제를 처리합니다. (지시 된 바와 같이) 성능 또한 거의 모든 경우에서 눈에 띄지 않을 것입니다.

게다가 int는 자연스러운 선택이어야하며 어쨌든 문제가 될 경우 가장 성능이 좋습니다. null을 저장할 수 있어야 하는 경우 Integer를 사용해야합니다 (또한 NullPointerException이 발생하므로 단순히 int를 사용하는 메서드에 대해 null 참조가 자동 언 박싱되지 않는지 확인하십시오).


Integer이론적으로는보다 느리지 만 int숫자를 처리하지 않는 한 성능에 미치는 영향은 최소화되어야합니다. 또한 JIT 최적화는 성능 손실을 줄입니다.

기본 유형 또는 참조 유형 측면에서 상황에 더 적합한 것을 사용하십시오.


int는 정수보다 10 배 빠릅니다.

이 코드를 jetm 성능 라이브러리로 테스트합니다.

int n;
EtmPoint point1 = etmMonitor.createPoint("test:objects");
for (n = 0; n < 1000000; n++) {
    Integer t = 0;
    t = 10;
    t = 11;
}

point1.collect();
EtmPoint point = etmMonitor.createPoint("test:primitives");
for (n = 0; n < 1000000; n++) {
    int t = 0;
    t = 10;
    t = 11;
}
point.collect();

etmMonitor.render(new SimpleTextRenderer());

결과 :
test : objects 10.184
test : primitives 1.151


아이디어를 제공하기 위해 2000 Integer는 쿼리에 약 0.5ms를 추가합니다. 이 데이터를 직렬화해야한다면 훨씬 더 추가 할 수 있습니다.

However, correctness should come first. There is no point being very fast but wrong. You have to consider null values and how you handle them. (Unless the column is NOT NULL) You could use Integer.MIN___VALUE or you could use a long field instead of int and use Long.MIN_VALUE for null. Even though it is larger than int, it would still be many times smaller and more efficient than Integer.


I guess it depends among other things on what you are using for accessing the database. With plain old JDBC you could do with ints, while an ORM could silently convert them to Integers anyway. And Integer would allow you to handle nulls.


int is used by java for most all calculations. Integer is used in all forms of Collections except for primitive arrays.

Using lots of temporary Integers with thrash the garbage collector and use unprofilable CPU in the background that will cause general slowdowns in everything. Too many temporaries being trashed per second will cause the CG to enter emergency "I need memory now" mode that can cause stalls in latency critical applications (ie: real time interactive graphics, physical device controllers or communications)

So for me if I have a lot of nested calls that do no math but access a lot of collections such as using keys for maps I use Integer so as to avoid tons of auto boxing when arguments are passed.

If the operations are math intensive or used as loop counters or other math oriented operations and not stored in collections (other than primitive arrays) I use the primitive. The same goes for all the other primitives except String which is a full fledged object.


int can't be cast to the String with using the toString or (String).

Integer can cast to String with toString or (String) and it can handle null.


If you want to check for a null value then Integer is best but if you want to compare the integer then int may be better. In the following example I am using integer c= 1000 and d= 1000 and compare it return false but in case of int they will return true.

public class IntegerCompare {

    public static void main(String[] args) {
        int a = 1000;
        int b = 1000;

        Integer c = 1000;
        Integer d = 1000;

        if (a == b) {
            System.out.println("int Value Equals");

        }
        if (c == d) {
            System.out.println("Integer value Equals");

        } else {

            System.out.println("Integer Value Not Equals");
        }
    }
}

One scenario to cover would be validation.

Imagine we have the following class:

class Foo{
    @Min(value = 10)
    int val;
}

If the user doesn't provide a value for val in the request, we will get a nasty NumberFormatException.

If int is replaced with Integer, we can use @NotNull and resolve this issue more gracefully.

참고URL : https://stackoverflow.com/questions/423704/which-one-to-use-int-or-integer

반응형