今天我已經讀過,字符串在Java中以空字符結束。但是爲什麼它是必須的,因爲字符串的長度已經由sting類的長度變量維護了?所以這對我來說有點奇怪。請有人向我澄清。爲什麼字符串在java中以空字符結尾?
謝謝
今天我已經讀過,字符串在Java中以空字符結束。但是爲什麼它是必須的,因爲字符串的長度已經由sting類的長度變量維護了?所以這對我來說有點奇怪。請有人向我澄清。爲什麼字符串在java中以空字符結尾?
謝謝
Java字符串不是空終止的。它們以length
的長度結尾。您可以創建一個Java字符串的最後一個字符,但不會自動終止字符串。 12<\0>45
的長度仍然是5而不是2,如在C.
該文檔沒有提到這種類型。我假設你讀錯了。
如果某些Java實現空終止字符串,那麼它是一個實現細節,但沒有任何語言規範保證。 (當然,作爲assylias註釋,字符串可能包含Java中的U + 0000)。但這並不是前所未聞的。 VB的字符串指向開頭,並以null結尾,使它們與普通的C API兼容,並且它們的長度存儲在字符串的開頭之前。
長度字段和保持字符串null都終止這種策略通常是僱主,因爲許多庫和api的期望空終止的字符串。
這意味着你仍然可以獲得保持長度獨立的性能增長,並且能夠直接將字符串傳遞給api,而不必創建字符串的副本。簡而言之:兩個世界中最好的只有一個字節的開銷。
這對於Java來說是錯誤的。 –
不要相信你讀的所有東西。在下面的屏幕截圖中,您可以看到沒有空終止。
是的,大多數調試器都可以證明這一點。 C中的「字符串」只是一組連續的內存字節,所以一串「123」應該顯示「1」,「2」,「3」,「\ 0」。 – OldProgrammer
字符串*在Java中不以*結尾。 – assylias