1. Integer클래스

Integer필드와 메서드를 가질 수 있는 클래스라는 점에서도 좋습니다. 물론 그것들이 있습니다. 그들 중 많은 - 수십. 여기서 우리는 가장 기본적인 것들을 고려할 것입니다.

Integer클래스에는 유형의 가능한 최대값과 최소값을 포함하는 두 개의 필드가 있습니다 int.

필드 설명
Integer.MAX_VALUE
int유형 의 가능한 최대 값
Integer.MIN_VALUE
int유형 의 가능한 최소값

int변수에 가능한 가장 작은 값 또는 가장 큰 값을 할당하려는 경우가 있습니다 . 이해할 수 없는 상수로 코드가 복잡해지는 것을 방지하기 위해 다음과 같이 매우 명확하게 작성할 수 있습니다.

암호 설명
int min = Integer.MIN_VALUE;
min == 0x80000000

클래스 Integer에는 몇 가지 흥미로운 방법도 있습니다. 여기 있습니다:

행동 양식 설명
String Integer.toHexString(int)
숫자의 16진수 표현인 문자열을 반환합니다.
String Integer.toBinaryString(int)
숫자의 이진 표현인 문자열을 반환합니다.
String Integer.toOctalString(int)
숫자의 8진수 표현인 문자열을 반환합니다.
Integer Integer.valueOf(int i)
전달된 개체를 개체 int로 래핑합니다.Integer
Integer Integer.parseInt(String)
전달된 문자열에서 얻은 숫자를 반환합니다.

이전에 정적 메서드를 만났습니다 Integer.parseInt(). 작동 방식을 기억해 봅시다.

int name = Integer.parseInt(string);

숫자(숫자만)를 포함하는 문자열이 메서드에 전달되면 parseInt()문자열을 구문 분석하고 포함된 숫자를 반환합니다.

나머지 방법도 유용합니다. 예를 들어, 그들 중 일부는 전달된 숫자를 숫자의 2진수, 8진수 또는 16진수 표현을 포함하는 문자열로 변환할 수 있습니다.



2. Double클래스

일반적으로 클래스는 클래스 와 Double비슷하지만 . 또한 우리가 관심을 가질 필드와 메서드도 있습니다. 그들 중 몇 가지를 고려하십시오.Integerdoubleint

클래스 Double에는 6개의 흥미로운 필드가 있습니다.

필드 설명
double Double.NEGATIVE_INFINITY
음의 무한대
double Double.POSITIVE_INFINITY
양의 무한대
int Double.MIN_EXPONENT
가능한 최소 지수(2 x )
int Double.MAX_EXPONENT
가능한 최대 지수(2 x )
double Double.MIN_VALUE
double유형 의 가능한 최소값
double Double.MAX_VALUE
double유형 의 가능한 최대 값

무한대

-1.0로 나누면 0.0음의 무한대가 됩니다. 1.0로 나누면 0.0양의 무한대가 됩니다. a를 0으로 나눌 수 있을 뿐만 double아니라 이러한 작업의 결과를 저장하는 데에도 사용할 수 있습니다.

a의 지수double

지수를 이해하는 것은 쉽습니다. 내부적으로 double은 가수와 지수로 구성됩니다. 그러나 여기서 지수의 값은 가 아니라 입니다 . 따라서 지수가 0만큼 증가하면 숫자의 총 값은 두 배가 됩니다.10x2x1

MIN_EXPONENT == -1024, 즉 , 대략 같다2-102410-308

물론 이 Double클래스에는 흥미로운 방법이 있습니다.

행동 양식 설명
String Double.toHexString(double)
숫자의 16진수 표현인 문자열을 반환합니다.
boolean Double.isInfinite(double)
전달된 숫자가 무한대인지 확인합니다.
boolean Double.isNaN(double)
전달된 번호가 맞는지 확인NaN
Double Double.valueOf(double)
double전달된 객체 Double를 래핑합니다.
Double Double.parseDouble(String)
전달된 문자열에서 얻은 숫자를 반환합니다.

흥미롭게도 전달된 숫자가 양의 무한대인지 음의 무한대인지 isInfinite()반환하는 메서드가 있습니다 .true

메서드 isNaN()는 비슷합니다 — 전달된 숫자가 NaN( Not-a-Number , 정의되지 않은 값을 나타내는 특수 상수)인지 확인합니다.



3. Character클래스

Character클래스는 주로 문자가 다양한 범주에 속하는지 여부를 확인할 수 있는 정적 유틸리티 메서드가 많다는 점에서 흥미롭습니다.

행동 양식 설명
Character.isAlphabetic(int)
문자가 알파벳인지 확인
Character.isLetter(char)
문자가 문자인지 확인
Character.isDigit(char)
문자가 숫자인지 확인
Character.isSpaceChar(char)
문자가 공백, 줄 바꿈 또는 페이지 나누기인지 확인합니다(코드: 12, 13, 14).
Character.isWhitespace(char)
공백, 탭 등 문자가 공백인지 확인합니다.
Character.isLowerCase(char)
문자가 소문자인지 확인
Character.isUpperCase(char)
문자가 대문자인지 확인
Character.toLowerCase(char)
문자를 소문자로 변환
Character.toUpperCase(char)
문자를 대문자로 변환

이러한 방법의 특징은 알려진 모든 알파벳과 함께 작동한다는 것입니다. 아라비아 숫자는 숫자 등으로 분류됩니다.



4. Boolean클래스

유형 은 유형 Boolean과 거의 동일합니다 boolean. 차이점은 미미합니다.

아래에서 클래스의 단순화된 버전을 보여줍니다 Boolean.

암호 설명
class Boolean
{
   public static final Boolean TRUE = new Boolean(true);
   public static final Boolean FALSE = new Boolean(false);

   private final boolean value;

   public Boolean(boolean value)
   {
      this.value = value;
   }

   public boolean booleanValue()
   {
      return value;
   }

   public static Boolean valueOf(boolean value)
   {
      return (value ? TRUE : FALSE);
   }
}


상수: TRUEè FALSE


변수

Boolean클래스 생성자 이




메서드는 내부 변수의 값을 반환합니다. 이



정적 메서드는 및 true로 변환됩니다 . TRUEfalseFALSE

유형 Boolean에는 두 개의 상수(두 개의 필드)가 있습니다.

클래스의 상수 부울 유형에 대응 설명
Boolean.TRUE
true
진실
Boolean.FALSE
false
거짓

유형 으로 작업하는 것과 동일한 방식으로 작업할 수 있습니다 boolean.

암호 메모
if (Boolean.TRUE)
{
}
클래스는 Boolean조건 안에 쓸 수 있는 유일한 클래스입니다.
Boolean a = Boolean.TRUE;
boolean b = Boolean.TRUE;
boolean c = true;
true세 변수는 모두 /와 같습니다.TRUE
Boolean a = Boolean.TRUE;
Boolean b = Boolean.TRUE;
if (a == b)
상수는 둘 다 사용하여 비교할 수 equals있으며 ==

이것도 작동합니다.

Autoboxing은 여기에서 훌륭하게 작동합니다. 즉, 이 유형을 boolean유형과 동일한 방식으로 사용할 수 있습니다. 주의해야 할 함정이 없습니다.

작성 방법 작동 방식
Boolean a = true;
Boolean b = true;
Boolean c = false;
boolean d = a;
Boolean a = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(true);
Boolean c = Boolean.valueOf(false);
boolean d = a.booleanValue();

다음은 booleanBoolean유형을 비교한 것입니다.

boolean a = true;
Boolean b = true; // b will be equal to Boolean.TRUE
Boolean c = true; // c will be equal to Boolean.TRUE

a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // true (compared by reference, but they point to the same object)

독립적인 개체가 정말로 필요한 경우 Boolean명시적으로 만들어야 합니다.

boolean a = true;
Boolean b = new Boolean(true); // New Boolean object
Boolean c = true; // c will be equal to Boolean.TRUE

a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // false (compared by reference, and they point to different objects)

Booleanan 내부를 사용하는 또 다른 예 if:

암호 메모
Boolean less = (2 < 3);
if (less)
{
   ...
}
이것은 컴파일되고 작동합니다

이렇게 하면 컴파일되지만 작동하지 않습니다!

암호 메모
Boolean less = null;
if (less)
{
   ...
}

오류 . 이 줄은 예외를 throw합니다.


5. 오토박싱 중 값 캐싱

정수 래퍼 유형과 관련된 몇 가지 함정이 있습니다.

int이미 알고 있듯이 an 과 an을 비교하면 Integerthe는 Integer다음으로 변환됩니다 int.

작성 방법 작동 방식
int a = 5;
Integer b = 5;
if (a == b)
{
   ...
}
int a = 5;
Integer b = Integer.valueOf(5);
if (a == b.intValue())
{
   ...
}

Integer두 개체를 서로 비교하면 ints로 변환되지 않습니다.

암호 콘솔 출력
Integer a = 500;
Integer b = 500;
int c = 500;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




false
true
true

a == cand , but , 왜냐하면 우리가 비교할 때 참조 를 비교하기 때문입니다. 본질적으로 우리가 기대하는 것입니다.b == ca != bab

놀라다

500그러나 로 바꾸면 100완전히 다른 결과를 얻습니다.

암호 콘솔 출력
Integer a = 100;
Integer b = 100;
int c = 100;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




true
true
true

여기서 문제는 autoboxing 중에 Integer객체가 항상 실제로 생성되는 것은 아니라는 것입니다 . -128객체는 inclusive를 통해 값에 대해 캐시됩니다 127.

Integer클래스에는 객체를 저장하는 숨겨진 배열이 있습니다: Integer(-128), Integer(-127), ... Integer(126),Integer(127)

를 쓰면 Integer x = 128오토박싱 프로세스가 새 개체를 생성하지만 를 쓰면 Integer x = 127오토박싱 프로세스가 캐시에서(배열에서) 기존 개체를 검색합니다.

개체를 캐시에서 가져오지 않으려면 Integer다음을 작성하여 명시적으로 만들어야 합니다.Integer x = new Integer(127);

Integer모든 래퍼 유형에는 , Long, Byte, Short, 와 같은 캐시가 있습니다 Boolean. Boolean유형 의 경우 TRUEFALSE값은 모두 상수이므로 기본적으로 캐시됩니다.