2013-08-24 34 views
9

Như tiêu đề của tôi gợi ý, đó là một câu hỏi lý thuyết. Tôi muốn biết rằng nếu java định nghĩa chuỗi là null chấm dứt.java có định nghĩa chuỗi là null chấm dứt không?

+0

@Reimeus, vậy cách chúng theo dõi chuỗi kết thúc? Sử dụng chiều dài? – Dewsworld

+0

Không thấy câu hỏi đó mặc dù đã tìm kiếm trên google trước đây. Có thể là một bản sao! – Dewsworld

+0

Dewsworld, nói rằng đó là một câu hỏi lý thuyết gần như là một lý do xác thực để đóng. SO là nghĩa vụ phải được cho các vấn đề thực tế mà bạn phải đối mặt. – paxdiablo

Trả lời

5

Chuỗi Java không được kết thúc bằng một ký tự null như trong C hoặc C++. Mặc dù các chuỗi java sử dụng nội bộ mảng char nhưng không có kết thúc null trong đó. Lớp chuỗi cung cấp một phương thức được gọi là chiều dài để biết số ký tự trong chuỗi.

Đây là mã đơn giản và nội dung chương trình gỡ rối của nó:

public static void main(String[] args) { 
    String s = "Juned"; 
    System.out.println(s); 
} 

Debugger ảnh chụp màn hình:

enter image description here

+1

Bạn có bất kỳ lý do nào để hỗ trợ câu trả lời của bạn không? –

+0

@Juned Ahsan, Bạn có thể giải thích một chút được không :) – Dewsworld

+0

Đặc tả java không đề cập đến nó, nhưng nếu bạn chạy mã trong chế độ gỡ lỗi, bạn có thể thấy nội dung của mảng nội bộ String và sẽ không có ký tự null kết thúc . –

1

Có vấn đề gì?

Nếu bạn chuyển đổi chuỗi Java thành một loại định dạng được tuần tự hóa (vào đĩa, mạng, v.v.), thì tất cả những vấn đề đó là định dạng tuần tự, không phải định dạng nội bộ của JVM.

Nếu bạn đang đọc dữ liệu chuỗi trong mã C qua JNI, thì bạn không bao giờ đọc dữ liệu trực tiếp, bạn luôn sử dụng các hàm JNI như GetStringChars() hoặc GetStringUTFChars(). GetStringChars() không được ghi nhận là trả về dữ liệu null bị chấm dứt, vì vậy bạn không nên giả định rằng nó bị hủy bỏ — bạn phải sử dụng GetStringLength() để xác định độ dài của nó. Tương tự như vậy với GetStringUTFChars(), bạn phải sử dụng GetStringUTF8Length() để xác định độ dài của nó trong modified UTF-8 format.

+3

"Có quan trọng không?" Umm ... thật tuyệt khi biết máy tính hoạt động như thế nào. – citelao

+1

Nó không quan trọng nếu bạn đang lo lắng về những gì sẽ xảy ra nếu bạn đặt một ký tự 'NUL' vào một' Chuỗi'. Tuy nhiên, nếu bạn đang làm điều đó, có thể lập luận rằng bạn đang sử dụng 'String' không chính xác ... vì một ký tự' NUL' sẽ không xuất hiện trong văn bản * thực *. (Nhưng tôi chấp nhận rằng có những trường hợp sử dụng mà bạn muốn cho phép 'NUL' trong một' String'.) –

7

Tôi muốn biết rằng nếu java định nghĩa chuỗi là null bị chấm dứt.

Không. Chuỗi được xác định là chuỗi có độ dài cố định là char giá trị. Tất cả các giá trị có thể char (từ 0 đến 65535) có thể được sử dụng trong một Chuỗi. Không có giá trị "phân biệt" có nghĩa là chuỗi kết thúc.

Vậy cách họ theo dõi chuỗi kết thúc? Sử dụng chiều dài?

Có. Đối tượng String có trường length riêng (trong tất cả các triển khai tôi đã kiểm tra ...).

Nếu bạn muốn hiểu thêm về cách chuỗi Java được triển khai, mã nguồn cho các phiên bản khác nhau có sẵn trực tuyến. Google cho "nguồn java.lang.String".

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