JavaRush /Java Blog /Random-KO /Java 정수 클래스 가이드

Java 정수 클래스 가이드

Random-KO 그룹에 게시되었습니다
이번 포스팅에서는 Integer 클래스에 대해 알아보겠습니다. 다음 질문을 고려해 봅시다:
  • 래퍼 클래스란 무엇입니까?
  • 프리미티브의 자동 패킹/언패킹;
  • Integer 클래스, 해당 메소드 및 상수의 연산.
Java 정수 클래스 튜토리얼 - 1

기본 유형의 래퍼 클래스

아시다시피 Java에는 다양한 데이터 유형이 있으며 이는 두 블록으로 나눌 수 있습니다.
  • 원어;
  • 참조.
Java에는 몇 가지 기본 데이터 유형이 있습니다.
  • 정수 - 바이트, 짧은, int, 긴;
  • 부동 소수점 숫자(실수) - float, double;
  • 논리적 데이터 유형 - 부울;
  • 문자 데이터 유형 - char.
각 기본 데이터 유형에는 자체 래퍼 클래스가 있습니다. Java 객체에서 원시적인 동생을 래핑하는 참조 데이터 유형입니다. 다음은 기본 데이터 유형과 해당 래퍼 클래스입니다.
기본 유형 래퍼 클래스
바이트 바이트
짧은 짧은
정수 정수
뜨다 뜨다
더블 더블
부울 부울
성격
실용적인 의미에서 기본 요소와 해당 래퍼 클래스는 공통점이 많습니다. 대부분의 작업은 동일하게 수행됩니다. 그러나 래퍼 클래스에는 기본 형식의 특징이 아닌 여러 가지 특성이 있습니다. 첫째, 클래스가 있습니다. 래퍼 클래스로 작업할 때 객체로 작업합니다. 두 번째로(다음의 모든 항목은 첫 번째 지점부터 이어집니다) 이러한 개체는 null일 수 있습니다. 셋째, 래퍼 클래스는 특정 데이터 유형에 대한 작업을 더 쉽게 해주는 다양한 상수와 메서드를 제공합니다. 이 기사에서는 Integer 클래스를 사용하여 작업하는 방법을 자세히 살펴보겠습니다.

정수 _

Integer 클래스는 기본 유형 int의 래퍼 클래스입니다. 이 클래스에는 int 유형의 단일 필드가 포함되어 있습니다. 래퍼 클래스로서 Integer는 int를 String으로, String을 int로 변환하는 여러 메서드뿐만 아니라 int 작업을 위한 다양한 메서드를 제공합니다. 아래에서는 수업과 함께 작업하는 다양한 예를 살펴보겠습니다. 창조부터 시작해보자. 가장 일반적으로 사용되는(사용하기 가장 쉬운) 방법은 다음 생성 옵션입니다.
Integer a = 3;
즉, 이 경우 Integer 변수의 초기화는 int 변수의 초기화와 유사합니다. 또한 Integer 변수는 int 변수의 값으로 초기화될 수 있습니다.
int i = 5;
Integer x = i;
System.out.println(x); // 5
위의 경우 자동 패킹이 암시적으로 발생합니다. 이에 대해서는 아래에서 더 자세히 이야기하겠습니다. 위에 나열된 초기화 옵션 외에도 생성자와 new 키워드를 사용하여 다른 객체처럼 Integer 변수를 생성할 수 있습니다.
Integer x = new Integer(25);
System.out.println(x);
그러나 쓰는 데 시간이 오래 걸리고 읽는 데 시간이 오래 걸리므로 이 옵션은 가장 일반적이지 않습니다. int 변수로 수행할 수 있는 모든 작업을 Integer 변수로 수행할 수 있습니다. 그들은 할 수있다:

Integer a = 6;
Integer b = 2;
Integer c = a + b;
System.out.println(c); // 8
덜다

Integer a = 6;
Integer b = 2;
Integer c = a - b;
System.out.println(c); // 4
곱하다

Integer a = 6;
Integer b = 2;
Integer c = a * b;
System.out.println(c); // 12
나누다

Integer a = 6;
Integer b = 2;
Integer c = a / b;
System.out.println(c); // 3
증가

Integer a = 6;
a++;
++a;
System.out.println(a); // 8
감소

Integer a = 6;
a--;
--a;
System.out.println(a); // 4
그러나 이 모든 경우에 Integer는 참조 데이터 유형이고 이 유형의 변수는 null이 될 수 있다는 점을 주의하고 기억해야 합니다. 이 경우(변수가 null인 경우) 산술 연산(및 null이 좋지 않은 다른 연산)을 자제하는 것이 좋습니다. 예는 다음과 같습니다.
Integer a = null;
Integer b = a + 1; // Здесь мы упадем с "Exception in thread "main" java.lang.NullPointerException"
System.out.println(b);
대부분의 비교 작업은 기본 유형 int와 동일한 방식으로 수행됩니다.
Integer a = 1;
Integer b = 2;

System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
산출:

false
false
true
true
두 정수변수를 비교하는 연산이 눈에 띕니다. 여기서 요점은 Integer가 참조 데이터 유형이고 해당 변수는 값 자체(객체)가 아닌 값에 대한 참조를 저장한다는 것입니다. 이 사실은 다음 코드 조각을 실행할 때 관찰할 수 있습니다.
Integer a = 1;
Integer b = 1;
Integer c = new Integer(1);

System.out.println(a == b); // true
System.out.println(a == c); // false
첫 번째 평등의 결과는 true이고 두 번째 평등의 결과는 false입니다. 이는 첫 번째 경우 동일한 객체에 대한 참조를 저장하는 두 변수(“a”와 “b”)를 비교하기 때문에 발생합니다. 두 번째 경우에는 서로 다른 두 개체를 참조하는 두 변수를 비교합니다(변수 "c"를 만들 때 새 개체를 만들었습니다). 또 다른 흥미로운 예를 들어보겠습니다.
Integer a = 1;
Integer b = 1;

Integer x = 2020;
Integer y = 2020;

System.out.println(a == b); // true
System.out.println(x == y); // false
보시다시피 첫 번째 비교 결과는 true이고 두 번째 비교 결과는 false입니다. 캐싱에 관한 모든 것입니다. -128부터 127까지 범위의 모든 정수(이 값은 사용자 정의 가능)가 캐시됩니다. 따라서 새 변수를 생성하고 -128에서 127 사이의 정수 값을 할당하면 새 객체를 생성하는 것이 아니라 변수에 캐시에 이미 생성된 객체에 대한 참조를 할당하는 것입니다. 이제 이 사실을 알면 위의 예는 그렇게 신비롭게 보이지는 않습니다. 변수 a와 b는 동일한 개체, 즉 캐시의 개체를 참조합니다. 그리고 변수 x와 y를 초기화하는 동안 우리는 매번 새로운 개체를 만들었고 이러한 변수는 다른 개체에 대한 참조를 저장했습니다. 그리고 아시다시피 == 연산자는 변수의 값을 비교하고 참조 변수의 값은 참조입니다. 두 Integer 변수 간의 동등성을 정확하게 확인하려면 (아무리 사소하게 들리더라도) equals 메소드를 사용해야 합니다. 위의 예를 다시 작성해 보겠습니다.
Integer a = 1;
Integer b = 1;

Integer x = 2020;
Integer y = 2020;

System.out.println(a.equals(b)); // true
System.out.println(x.equals(y)); // true

자동 패킹 및 언패킹 정수

자동 포장 및 포장 풀기란 무엇입니까? 새로운 정수 변수를 생성할 때 다음 구성을 사용했습니다.
Integer a = 2020;
이 방법으로 new 키 연산자를 사용하지 않고 새 객체를 만들었습니다. 이는 기본 유형 int의 자동 패킹 메커니즘 덕분에 가능합니다. 기본 int 변수를 Integer 참조 변수의 값에 할당하면 반대 절차가 발생합니다.
Integer a = 2020;
int x = a;
이 경우 참조(즉, 객체에 대한 참조는 변수 “a”의 값임)를 원시 변수에 할당한 것으로 보입니다. 하지만 실제로는 자동 언패킹 메커니즘 덕분에 변수 “x”에 2020이라는 값이 기록되었습니다. 자동 패킹/언패킹은 Java에서 매우 일반적인 현상입니다. 종종 그것은 저절로 발생하며 때로는 프로그래머가 알지 못하는 사이에도 발생합니다. 하지만 여전히 이 현상에 대해 알아야 합니다. Javarush에 이 주제에 대한 흥미로운 기사가 ​​있습니다 .

정수 클래스 상수

Integer 클래스는 정수 작업을 위한 다양한 상수와 메서드를 제공합니다. 이 섹션에서는 실제로 그 중 일부를 자세히 살펴보겠습니다. 상수부터 시작해 보겠습니다. 아래 표에는 모든 클래스 상수가 나와 있습니다.
코스탄타 설명
크기 int 유형이 차지하는 두 자리 숫자 체계의 비트 수
바이트 int 유형이 차지하는 두 자리 숫자 체계의 바이트 수
MAX_VALUE int형이 담을 수 있는 최대값
MIN_VALUE int 유형이 보유할 수 있는 최소값
유형 int 유형에서 Class 유형의 객체를 반환합니다.
다음 코드를 실행하여 이러한 모든 상수의 값을 살펴보겠습니다.
public static void main(String[] args) {
        System.out.println(Integer.SIZE);
        System.out.println(Integer.BYTES);
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.TYPE);
}
결과적으로 다음과 같은 결과를 얻습니다.

32
4
2147483647
-2147483648
int

Integer 클래스의 메서드

이제 Integer 클래스에서 가장 많이 사용되는 메소드를 간단히 살펴보겠습니다. 따라서 "상위"에는 문자열에서 숫자를 변환하거나 숫자에서 문자열을 변환하는 메소드가 앞에 있습니다. 문자열을 숫자로 변환하는 것부터 시작해 보겠습니다. parsInt 메소드는 이러한 목적으로 사용되며 서명은 다음과 같습니다.
  • 
    static int parseInt(String s)
이 메서드는 문자열을 int로 변환합니다. 이 방법이 어떻게 작동하는지 살펴보겠습니다.
int i = Integer.parseInt("10");
System.out.println(i); // 10
변환이 가능하지 않은 경우(예를 들어, parsInt 메소드에 단어를 전달한 경우) NumberFormatException이 발생합니다. parseInt(String s) 메소드에는 오버로드된 형제가 있습니다.
  • 
    static int parseInt(String s, int radix)
이 메소드는 매개변수 s를 int로 변환합니다. radix 매개변수는 s의 숫자가 원래 쓰여진 숫자 체계를 나타내며, 이를 int로 변환해야 합니다. 아래 예:
System.out.println(Integer.parseInt("0011", 2)); // 3
System.out.println(Integer.parseInt("10", 8));   // 8
System.out.println(Integer.parseInt("F", 16));   // 15
parseInt 메소드는 기본 데이터 유형 int를 반환합니다. 이러한 메소드에는 valueOf 메소드 와 유사합니다 . 이 메서드의 일부 변형은 단순히 내부적으로parseInt를 호출합니다. ParseInt와의 차이점은 valueOf의 결과가 int가 아닌 Integer라는 것입니다. 이 방법에 대한 모든 옵션과 작동 방식의 예를 아래에서 살펴보겠습니다.
  • static Integer valueOf(int i) - 값이 i인 정수를 반환합니다.
  • static Integer valueOf(String s) - parseInt(String s)와 유사하지만 결과는 Integer입니다.
  • static Integer valueOf(String s, int radix) -parseInt(String s, int radix)와 유사하지만 결과는 Integer입니다.
예:
int a = 5;
Integer x = Integer.valueOf(a);
Integer y = Integer.valueOf("20");
Integer z = Integer.valueOf("20", 8);

System.out.println(x); // 5
System.out.println(y); // 20
System.out.println(z); // 16
문자열을 int/Integer로 변환할 수 있는 메서드를 살펴보았습니다. 반대 절차는 toString 메소드를 사용하여 수행됩니다 . Integer 객체에 대해 toString 메서드를 호출하고 해당 문자열 표현을 가져올 수 있습니다.
Integer x = 5;
System.out.println(x.toString()); // 5
그러나 toString 메서드는 개체에 대해 암시적으로 호출되는 경우가 많기 때문에(예: 인쇄를 위해 개체를 콘솔에 보낼 때) 개발자가 이 메서드를 명시적으로 사용하는 경우는 거의 없습니다. int 매개변수를 가져와 이를 문자열 표현으로 변환하는 정적 메서드 toString도 있습니다. 예를 들어:
System.out.println(Integer.toString(5)); // 5
그러나 비정적 toString 메서드와 마찬가지로 정적 메서드를 명시적으로 사용하는 경우는 거의 없습니다. 더 흥미로운 것은 2개의 정수 매개변수를 사용하는 정적 메소드 toString입니다.
  • static String toString(int i, int radix) - i를 기수 체계의 문자열 표현으로 변환합니다.
예:
System.out.println(Integer.toString(5, 2)); // 101
Integer 클래스에는 두 숫자의 최대/최소값을 찾는 몇 가지 메서드가 있습니다.
  • static int max(int ​​​​a, int b)는 전달된 변수 중 가장 큰 값을 반환합니다.
  • static int min(int a, int b)는 전달된 변수 중 가장 작은 값을 반환합니다.
예:
int x = 4;
int y = 40;

System.out.println(Integer.max(x,y)); // 40
System.out.println(Integer.min(x,y)); // 4

결론

이번 글에서는 Integer 클래스를 살펴보았습니다. 우리는 이것이 어떤 클래스인지, 래퍼 클래스는 무엇인지에 대해 이야기했습니다. 우리는 실용적인 관점에서 수업을 살펴보았습니다. 비교 연산을 포함한 산술 연산의 예를 살펴보았습니다. 우리는 두 정수 변수를 비교하는 복잡한 과정을 살펴보고 캐시된 객체의 개념을 조사했습니다. 또한 원시 데이터 유형의 자동 패킹/언패킹 현상에 대해서도 언급했습니다. 또한 Integer 클래스의 일부 메서드와 일부 상수를 살펴보았습니다. 그들은 한 숫자 체계에서 다른 숫자 체계로 숫자를 변환하는 예를 제시했습니다.

숙제

  1. Integer 클래스의 다른 방법이 무엇인지 연구하고( 공식 문서가 있는 웹 사이트에서 연구할 수 있음) 연구한 방법 중 어떤 방법(기사에 제공된 방법 제외)이 귀하의 의견에 가장 유용하다고 생각하는지 댓글에 적어주세요( 가장 자주 사용됩니다). 또한 귀하의 의견에 대한 이유를 제시하십시오.

    PS 여기에는 정답이 없지만 이 활동을 통해 수업을 더 잘 공부할 수 있습니다.

  2. 자료를 통합하려면 작은 간단한 문제를 해결하세요.

    두 개의 숫자가 있습니다.

    1100001001 - 2진수 시스템
    33332 - 5진수 시스템

    Integer 클래스의 메서드만 사용하여 주어진 두 숫자 사이의 최대값을 결정한 다음 삼항 숫자 시스템에서 최대값과 최소값 간의 차이를 표시해야 합니다.

  3. 가능한 최대 정수 값을 8진수 시스템으로 변환하고 결과 숫자의 자릿수를 표시합니다(프로그래밍 방식으로 숫자 계산).

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION