Jak sugeruje mój tytuł, jest to teoretyczne pytanie. Chciałbym wiedzieć, że jeśli java definiuje ciąg znaków jako zakończone znakiem null.Czy java definiuje łańcuch jako zakończone znakiem null?
Odpowiedz
Łańcuchy Java nie są zakończone znakami pustymi, jak w C lub C++. Mimo że ciągi java używają wewnątrz tablicy char, ale nie ma w tym żadnej wartości kończącej. Klasa String udostępnia metodę o nazwie length, która określa liczbę znaków w łańcuchu.
Oto prosty kod i jego zawartość debugger:
public static void main(String[] args) {
String s = "Juned";
System.out.println(s);
}
Debugger screenshot:
Czy masz jakieś uzasadnienie, aby wesprzeć swoją odpowiedź? –
@Juned Ahsan, Czy mógłbyś wyjaśnić troszkę :) – Dewsworld
Specyfikacja java nie wspomina o tym, ale jeśli uruchomisz swój kod w trybie debugowania, możesz zobaczyć zawartość wewnętrznej tablicy String, i nie będzie żadnego kończącego znaku pustego . –
Czy to ważne?
Jeśli przekształcisz ciąg znaków Java w jakiś sparametryzowany format (na dysk, sieć itp.), Najważniejszy będzie format serializacji, a nie wewnętrzny format JVM.
Jeśli czytasz dane ciągu w kodzie C przez JNI, to nigdy nie czytasz danych bezpośrednio, zawsze używasz funkcji JNI, takich jak GetStringChars()
lub GetStringUTFChars()
. GetStringChars()
nie jest dokumentowana jako zwracające dane zakończone wartością NUL, więc nie należy zakładać, że są one zakończone wartością NULL - należy użyć wartości GetStringLength()
, aby określić jej długość. Podobnie z GetStringUTFChars()
, musisz użyć GetStringUTF8Length()
, aby określić jego długość w modified UTF-8 format.
"Czy to ma znaczenie?" Umm ... fajnie jest wiedzieć, jak działają komputery. – citelao
Ma to znaczenie, jeśli martwisz się, co stanie się, jeśli umieścisz znak 'NUL' w' String'. Jeśli jednak to robisz, można argumentować, że używasz 'String' niepoprawnie ... ponieważ znak' NUL' nie powinien pojawić się w * rzeczywistym * tekście. (Ale akceptuję, że istnieją przypadki użycia, w których i tak chciałbyś zezwolić na 'NUL' w' String').) –
Chciałbym wiedzieć, że jeśli java definiuje ciąg jako zakończone wartością null.
Nie. Ciąg określa się jako ustaloną długość o wartościach char
. Wszystkie możliwe wartości char
(od 0 do 65535) mogą być używane w łańcuchu. Nie ma "wyróżnionej" wartości, co oznacza, że ciąg się kończy.
W jaki sposób śledzą zakończenie łańcucha? Używając długości?
Tak. Obiekt String
ma prywatne pole length
(we wszystkich analizowanych przeze mnie aplikacjach ...).
Jeśli chcesz dowiedzieć się więcej o implementacji łańcuchów Java, kod źródłowy dla różnych wersji jest dostępny online. Google dla "źródła java.lang.String".
@Reimeus, więc w jaki sposób śledzić koniec napisu? Używając długości? – Dewsworld
Nie widziałem tego pytania mimo przeszukania google wcześniej. Może być duplikatem! – Dewsworld
Dewsworld, stwierdzając, że jest to teoretyczne pytanie, jest prawie martwym powodem zamknięcia. SO ma służyć rzeczywistym problemom, z którymi się borykasz. – paxdiablo