cuốn sách gpt4 ai đã làm

Học String.intern()

In lại Tác giả: Người biết Thời gian cập nhật: 2024-03-13 07:15:14 29 4
mua khóa gpt4 Nike

gói com.fastone.www.javademo.stringintern; /** * * String.intern() là một phương thức gốc * Chức năng của nó là: nếu nhóm hằng chuỗi đã chứa một chuỗi bằng đối tượng Chuỗi này thì Trả về một Chuỗi. đối tượng đại diện cho chuỗi này trong nhóm; * Mặt khác, thêm chuỗi có trong đối tượng Chuỗi này vào nhóm hằng số và trả về một tham chiếu đến đối tượng Chuỗi này. * * @program: javademo * @description: * @author: sunyuhua * @create: 2022-02-17 09:41 **/ public class TestStringIntern { public static void main(String[] args) { // Trong hằng số pool Tạo "abc" trong "abc", s1 trỏ đến địa chỉ tham chiếu của "redis" trong pool hằng String s1 = "abc"; String() mở một không gian bộ nhớ trong heap và gán tham chiếu địa chỉ của không gian bộ nhớ cho s2, // "abc" là một hằng số, sau đó vào nhóm hằng chuỗi để xem có đối tượng chuỗi "abc" không , nếu không, hãy phân bổ một khoảng trống Lưu trữ "abc" và lưu địa chỉ vùng trống của nó vào khoảng trống mới trong heap. String s2 = new String("abc"); // s1 trỏ đến địa chỉ trong vùng hằng số. trỏ đến địa chỉ trong heap chắc chắn là khác nhau, sai. System.out.println("s1==s2 " + (s1 == s2)); // Phương thức String.intern() trước tiên kiểm tra xem chuỗi "abc" đã tồn tại trong nhóm hằng chưa, // nếu nó tồn tại, Sau đó trả về một tham chiếu đến chuỗi trong nhóm hằng số; nếu nó không tồn tại, hãy tạo một tham chiếu đến chuỗi gốc trong nhóm hằng số và trả về // Vì chuỗi "abc" đã tồn tại trong nhóm hằng số nên s2.intern() trả về tham chiếu địa chỉ của "abc" trong nhóm hằng số s2.intern() == s2 là sai System.out.println( "s2. intern()==s2 " + (s2.intern() == s2)); // Cả s1 và s2.intern() đều trỏ đến tham chiếu địa chỉ của "abc" trong nhóm hằng số, vì vậy nó đúng System.out.println("s2.intern()==s1 " + (s2.intern() = = s1) ); // Phương thức toString() sẽ gọi new String(), mở một không gian bộ nhớ trong heap và gán tham chiếu địa chỉ của không gian bộ nhớ cho str, // "Máy tính" là một hằng số, sau đó đi đến nhóm hằng chuỗi để xem có đối tượng chuỗi "máy tính" hay không. Nếu không, hãy phân bổ một khoảng trống để lưu trữ "máy tính" và lưu địa chỉ không gian của nó vào không gian mới trong heap. String str = new StringBuilder("Computer").toString(); // Vì "Computer" đã tồn tại trong nhóm hằng số, str.intern() trả về tham chiếu địa chỉ của "Computer" trong nhóm hằng số và str trỏ tới tham chiếu địa chỉ trong heap thì cả hai đều sai System.out.println(str.intern() == str); // false // Phương thức toString() sẽ gọi new String(), tạo ra một đối tượng của lớp String trong heap và nội dung được ghép nối ​​"Computer" Software", // Lưu ý: Kết quả của phép cộng sẽ không được đặt trong constant pool. Không có chuỗi "computer software" nào trong constant pool // str1 trỏ đến địa chỉ của đối tượng lớp String trong đống. Chuỗi str1 = mới StringBuilder("Computer").append("Software").toString(); // Câu này sẽ tạo ra ba đối tượng: 1 là một đối tượng chuỗi biểu thị nội dung của "Computer"; 2 là một ký tự biểu thị nội dung của "Software"; " Đối tượng chuỗi; // 3 là đối tượng chuỗi đại diện cho nội dung của "phần mềm máy tính". 1 và 2 đứng trước 3 và nhóm hằng số cũng sẽ lưu trữ tham chiếu đến 1 và 2. // 3 là đối tượng trong heap mà str1 trỏ tới. (Câu này là điểm mấu chốt) // Vì vậy: str1.intern() trước tiên tìm kiếm "phần mềm máy tính" trong nhóm hằng số. Nếu không tìm thấy, nó sẽ sao chép tham chiếu địa chỉ trên heap vào nhóm hằng số (lúc này thời gian, nhóm hằng số được tạo ra Đối tượng thứ ba: phần mềm máy tính) và trả về tham chiếu này // Và new StringBuilder("Computer").append("Software").toString() cũng là một tham chiếu từ nhóm hằng số chuỗi. tới đối tượng trong heap // Vì vậy str1.intern() và str1 trỏ tới địa chỉ của đối tượng lớp String trong heap, nên nó đúng System.out.println(str1.intern() == str1); // true String str2 = new StringBuilder(" ja ").append("va").toString(); // instance chuỗi được tạo bởi StringBuilder nằm trên vùng heap Java // str2 trỏ đến địa chỉ trong vùng heap // Vì máy ảo JVM đã tạo "java" trong nhóm hằng số trong quá trình khởi tạo, str2.intern() trả về một tham chiếu đến "java" trong nhóm hằng số, đó là sai System.out.println(str2.intern() = = str2); // false (một là tham chiếu đối tượng trong heap và một là tham chiếu java trong nhóm hằng chuỗi, vì vậy nó không phải là đối tượng) } }
29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress