GP Coder

Trang chia sẻ kiến thức lập trình Java

  • Java Core
    • Basic Java
    • OOP
    • Exception Handling
    • Multi-Thread
    • Java I/O
    • Networking
    • Reflection
    • Collection
    • Java 8
  • Design pattern
    • Creational Pattern
    • Structuaral Pattern
    • Behavior Pattern
  • Web Service
    • SOAP
    • REST
  • JPA
  • Java library
    • Report
    • Json
    • Unit Test
  • Message Queue
    • ActiveMQ
    • RabbitMQ
  • All
Trang chủ Java Core Basic Java Integer Constant Pool trong Java

Integer Constant Pool trong Java

Đăng vào 03/02/2018 . Được đăng bởi GP Coder . 7835 Lượt xem . Toàn màn hình

Trong bài viết hướng dẫn sử dụng Java String, StringBuffer và StringBuilder các bạn đã biết khi String được tạo bằng cách sử dụng literal thì nó được quản lý trong String Constant Pool. Vậy với kiểu Integer có Integer Contant Pool để quản lý các đối tượng như String Constant Pool không? Chúng ta sẽ cùng nhau thảo luận trong phần tiếp theo của bài viết này.

Nội dung

  • 1 Integer là gì?
  • 2 So sánh dữ liệu kiểu Integer

Integer là gì?

Lớp Integer wrap (bao đóng) một giá trị của kiểu int nguyên thủy (primitive) trong một đối tượng. Một đối tượng kiểu Integer chứa một trường duy nhất có kiểu là int.

Ngoài ra, lớp này cung cấp một số phương thức để chuyển đổi một int đến một String và một String đến một int, cũng như các hằng số và phương thức hữu ích khi thao tác với một giá trị kiểu int.

Chi tiết về lớp Wrapper, các bạn có thể xem ở bài viết Các kiểu dữ liệu trong java.

So sánh dữ liệu kiểu Integer

Hãy xem ví dụ bên dưới:


public class IntegerCompare {

	public static void main(String[] args) {
		Integer i1 = 127;
		Integer i2 = 127;

		Integer i3 = 128;
		Integer i4 = 128;

		Integer i5 = new Integer(127);
		Integer i6 = new Integer(127);

		int i7 = 127;

		System.out.println(i1 == i2); // = true
		System.out.println(i3 == i4); // = false
		System.out.println(i5 == i6); // = false
		System.out.println(i1 == i5); // = false
		System.out.println(i1 == i7); // = true
	}

}

Java gọi phương thức Integer.valueOf() bất cứ khi nào chúng ta tạo đối tượng lớp Integer, ví dụ: Integer i1 = 127 , tương đương với Integer i1 = Integer.valueOf(127) .

Hãy xem code của phương thức Integer.valueOf() được cài đặt bên trong JDK:

Như bạn thấy, phương thức Integer.valueOf() trả về một thể hiện Integer đại diện cho giá trị int được chỉ định.

Nếu một giá trị kiểu int nằm trong khoảng Integer.low và Integer.high thì đối tượng Integer được trả về từ Integer.cache. Trường hợp ngược lại, khởi tạo đối tượng Integer mới, đại diện cho giá trị int được chỉ định.

Xem tiếp nội dung của lớp IntegerCache:

Integer.cache lưu trữ bộ nhớ đệm (cache) các giá trị Integer. Như bạn thấy giá, mặc định giá trị high = 127, low = -128, nên các giá trị được cache trong khoảng từ -128 đến 127. Chúng ta có thể thay đổi giá trị high bằng cách thêm cấu hình JVM:

-Djava.lang.Integer.IntegerCache.high=<size>

-XX:AutoBoxCacheMax=<size>

Kết quả của ví dụ trên, có thể được giải thích thông qua hình bên dưới:

Khi so sánh bằng toán tử == nghĩa là ta so sánh địa chỉ của vùng nhớ. Trường hợp i1 và i2 cùng tham chiếu đến 1 vùng nhớ nên kết quả là true, các trường hợp khác do không cùng vùng nhớ nên kết quả là false. Trường hợp i1 == i7 có kết quả là true, lý do một kiểu Integer Wrapper khi so sánh == với một kiểu int primitive type thì JVM sẽ sử dụng cơ chế Unboxing để chuyển kiểu Wrapper về kiểu primitive tương ứng.

Lưu ý:

  • Để so sánh giá trị của 2 đối tượng kiểu Integer chúng ta nên sử dụng phương thức equals() để so sánh hoặc chuyển đổi về kiểu primitive tương ứng trước khi thực hiện so sánh ==.
  • Tương tự chúng ta cũng có Long Constant Pool. Tuy nhiên, không có Constant Pool cho kiểu Float, Double vì không thể xác định tất cả các số thực để lưu vào cache.
4.9
22
Nếu bạn thấy hay thì hãy chia sẻ bài viết cho mọi người nhé! Và Donate tác giả

Shares

Chuyên mục: Basic Java Được gắn thẻ: Basic Java, Performance

Hướng dẫn Jackson Streaming API để đọc và ghi JSON
Lập trình đa luồng trong Java (Java Multi-threading)

Có thể bạn muốn xem:

  • Kiểu dữ liệu Ngày Giờ (Date Time) trong java (29/10/2017)
  • Autoboxing và Unboxing trong Java (26/10/2017)
  • Tổng quan về ngôn ngữ lập trình java (18/10/2017)
  • Chương trình Java đầu tiên (19/10/2017)
  • Tiêu chuẩn coding trong Java (Coding Standards) (21/10/2017)

Bình luận

bình luận

Tìm kiếm

Bài viết mới

  • Clean code 13/01/2024
  • Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud 02/10/2020
  • Kết nối RabbitMQ sử dụng Web STOMP Plugin 19/06/2020
  • Sử dụng publisher confirm trong RabbitMQ 16/06/2020
  • Sử dụng Dead Letter Exchange trong RabbitMQ 13/06/2020

Xem nhiều

  • Hướng dẫn Java Design Pattern – Factory Method (98061 lượt xem)
  • Hướng dẫn Java Design Pattern – Singleton (97702 lượt xem)
  • Giới thiệu Design Patterns (87770 lượt xem)
  • Lập trình đa luồng trong Java (Java Multi-threading) (86441 lượt xem)
  • Giới thiệu về Stream API trong Java 8 (83840 lượt xem)

Nội dung bài viết

  • 1 Integer là gì?
  • 2 So sánh dữ liệu kiểu Integer

Lưu trữ

Thẻ đánh dấu

Annotation Authentication Basic Java Behavior Pattern Collection Creational Design Pattern Cấu trúc điều khiển Database Dependency Injection Design pattern Eclipse Exception Executor Service Google Guice Gson Hibernate How to Interceptor IO Jackson Java 8 Java Core JDBC JDK Jersey JMS JPA json JUnit JWT Message Queue Mockito Multithreading OOP PowerMockito RabbitMQ Reflection Report REST SOAP Structuaral Pattern Swagger Thread Pool Unit Test Webservice

Liên kết

  • Clean Code
  • JavaTpoint
  • Refactoring Guru
  • Source Making
  • TutorialsPoint
  • W3Schools Online Web Tutorials

Giới thiệu

GP Coder là trang web cá nhân, được thành lập với mục đích lưu trữ, chia sẽ kiến thức đã học và làm việc của tôi. Các bài viết trên trang này chủ yếu về ngôn ngữ Java và các công nghệ có liên quan đến Java như: Spring, JSF, Web Services, Unit Test, Hibernate, SQL, ...
Hi vọng góp được chút ít công sức cho sự phát triển cộng đồng Coder Việt.

Donate tác giả

Tìm kiếm các bài viết của GP Coder với Google Search

Liên hệ

Các bạn có thể liên hệ với tôi thông qua:
  • Trang liên hệ
  • Linkedin: gpcoder
  • Email: contact@gpcoder.com
  • Skype: ptgiang56it

Follow me

Copyright 2025 © GP Coder · All Rights Reserved · Giới thiệu · Chính sách · Điều khoản · Liên hệ ·

Share

Blogger
Delicious
Digg
Email
Facebook
Facebook messenger
Flipboard
Google
Hacker News
Line
LinkedIn
Mastodon
Mix
Odnoklassniki
PDF
Pinterest
Pocket
Print
Reddit
Renren
Short link
SMS
Skype
Telegram
Tumblr
Twitter
VKontakte
wechat
Weibo
WhatsApp
X
Xing
Yahoo! Mail

Copy short link

Copy link