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".
- 1. Podwójny łańcuch zakończony znakiem Null
- 2. C++ zakończone znakiem null wyprowadzenie tablicy char znaków
- 3. Dlaczego łańcuchy zakończone znakiem NUL? Lub: null zakończone vs. przechowywania znaków + długość
- 4. Czy standardowe pliki tekstowe są zakończone NULL?
- 5. Czy literały łańcuchowe zakończone znakiem zerowym zawierają dodatkowy terminator o wartości NULL?
- 6. są strtol, strtoll, strtod bezpieczne dla jakichkolwiek znaków, nawet nie zakończone znakiem null?
- 7. Uzyskiwanie łańcucha zakończonego znakiem null z System.Text.Encoding.Unicode.GetString
- 8. Co to jest łańcuch zakończony znakiem NUL?
- 9. Jak mogę wyprowadzać łańcuchy zakończone znakiem NUL w Awk?
- 10. Czy char * argumenty argv [] w głównej null są zakończone?
- 11. Java definiuje lub inicjalizuje atrybuty klasy
- 12. Łańcuch indeksowania jako znaki
- 13. Selenium WebDriver - definiuje selektory WebElement jako stały dobry pomysł?
- 14. Czy Java definiuje rozmiar swoich typów pierwotnych w dowolnym miejscu?
- 15. Czy Java definiuje stałe dla dowolnych znaków, takich jak SPACJA?
- 16. Łańcuch komparatorów w java
- 17. Dlaczego jądro Linuksa # definiuje symbol jako taki?
- 18. Czy null jest klasą w języku Java?
- 19. C++, doładowanie asio, odbiera łańcuch zakończony znakiem o wartości NUL
- 20. Jak wiedzieć, czy __uint128_t definiuje
- 21. Czy istnieje funkcja Java, która analizuje znaki ze znakiem ewakuacji?
- 22. Java - wyjątek JSON Null
- 23. Łańcuch jako czynnik w R
- 24. Drukuj Łańcuch znaków Unicode jako rzeczywisty charakter
- 25. Jak wydrukować łańcuch zakończony znakiem Null za pomocą znaków nowej linii bez pokazywania odwrotnych ukośników w gdb?
- 26. Czy null to słowo kluczowe Java?
- 27. Co definiuje "aktywny" wątek?
- 28. ustawić tło jako NULL
- 29. Java zastąpić metodę, zastępując z pustym znakiem
- 30. Null safe Kolekcja jako strumień w języku Java 8
@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