2015-04-18 19 views
5

Tôi đang lấy cấu trúc và phân tích dữ liệu. Chúng tôi đã đi qua cách phân công và so sánh các loại đối tượng là chậm hơn nhiều so với phân công và so sánh cho các loại cơ bản, chẳng hạn như int.Các số nguyên của con trỏ Java?

Tôi nhớ lại việc học C (tất cả những người gần ba mươi năm trước) và cách con trỏ trong C là (hoặc là) gọi số nguyên. Là Java tương tự như ngày hôm nay, là một tham chiếu đến một đối tượng instance nội địa chỉ số nguyên bộ nhớ, và như vậy là so sánh như

if (MyObject != null) {...} 

một hoạt động số nguyên trong phạm vi khuôn khổ?

Tôi hy vọng câu hỏi của tôi là rõ ràng. Tôi đã nghiên cứu xung quanh và tôi không thể tìm thấy một câu trả lời rõ ràng về cách Java quản lý bộ nhớ động của nó.

+1

Tôi thấy bài đăng này bị nhầm lẫn nguy hiểm. Bạn dường như nhấn mạnh rằng "so sánh đối tượng là chậm", và rằng so sánh con trỏ là nhanh chóng và do đó tốt hơn. Nhưng đó là những thứ hoàn toàn khác. Một là về bình đẳng giá trị và khác là về nhận dạng đối tượng. Để đưa ra một sự tương tự trong Python, một là về '99 == 99', và cái kia là về' 301 là 301' –

+0

Tôi không xao nhãng, tôi hỏi. Cảm ơn vì đầu vào của bạn. – failure

+0

Tất cả các giá trị trong Java là "số nguyên" nội bộ, bao gồm cả số dấu phẩy động. Đó là vấn đề làm thế nào họ được giải thích. Nhưng bạn đang bối rối so sánh * con trỏ * với so sánh * đối tượng * chỉ ra - hai điều hoàn toàn khác nhau. So sánh giữa hai "con trỏ" (tham chiếu) Java với '==' là nhanh như so sánh hai giá trị * dài *. –

Trả lời

3

Câu trả lời ngắn gọn là có, một tham chiếu đến một đối tượng được lưu giữ như con trỏ như nó là trong C.

Tôi không chắc chắn những gì bạn có nghĩa là bằng cách lưu trữ như "số nguyên", nhưng nếu những gì bạn muốn là thực hiện một số thao tác trên chúng như bạn có thể làm trong C (ví dụ: thêm số nguyên vào một con trỏ, vv), thì bạn không thể với Java.

Đối với phần còn lại, nó khá giống nhau ngoại trừ việc nó được xử lý bởi Java.

JLS 4.3.1 xác định rằng một tham chiếu đến một đối tượng được lưu giữ như con trỏ:

Các giá trị tham chiếu (thường chỉ tham khảo) là con trỏ đến những đối tượng, và một tham chiếu null đặc biệt, trong đó đề cập đến không có đối tượng.

+0

Trong C, ban đầu, pre-ANSI C, con trỏ là số nguyên và do đó hoạt động trên con trỏ, đặc biệt, nhiệm vụ, là nhanh như một hoạt động trên một số nguyên. Tôi không tìm kiếm sự kiểm soát trực tiếp, tôi chỉ tò mò về chi phí trên các hoạt động đó. Cảm ơn! – failure

+0

@failure Bạn được chào đón. –

Các vấn đề liên quan