2013-08-24 12 views
9

Come suggerisce il mio titolo, è una domanda teorica. Mi piacerebbe sapere che se java definisce string come null terminato.java definisce string come null terminato?

+0

@Reimeus, quindi come tracciano la fine della stringa? Usando la lunghezza? – Dewsworld

+0

Non ho visto quella domanda, anche se ho cercato su Google prima. Potrebbe essere un duplicato! – Dewsworld

+0

Dewsworld, affermando che si tratta di una domanda teorica, è quasi un motivo di chiusura. SO dovrebbe essere per i problemi reali che affronti. – paxdiablo

risposta

5

Le stringhe Java non vengono terminate con caratteri null come in C o C++. Sebbene le stringhe java utilizzino internamente il char array ma non c'è nulla che termina in questo. La classe String fornisce un metodo chiamato length per conoscere il numero di caratteri nella stringa.

Ecco il codice semplice e il suo contenuto debugger:

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

Debugger screenshot:

enter image description here

+1

Hai qualche ragionamento per sostenere la tua risposta? –

+0

@Juned Ahsan, puoi spiegare un po ':) – Dewsworld

+0

Le specifiche java non lo menzionano ma se si esegue il codice in modalità di debug, si può vedere il contenuto dell'array interno di String e non ci sarà alcun carattere null di terminazione . –

1

importa?

Se si converte una stringa Java in una sorta di formato serializzato (su disco, rete, ecc.), Tutto ciò che conta è il formato di serializzazione, non il formato interno della JVM.

Se stai leggendo i dati della stringa in codice C tramite JNI, non hai mai letto direttamente i dati, usi sempre le funzioni JNI come GetStringChars() o GetStringUTFChars(). GetStringChars() non è documentato come restituire dati con terminazione nulla, quindi non si deve presupporre che sia terminato con null-è necessario utilizzare GetStringLength() per determinarne la lunghezza. Allo stesso modo con GetStringUTFChars(), è necessario utilizzare GetStringUTF8Length() per determinare la sua lunghezza in modified UTF-8 format.

+3

"Ha importanza?" Umm ... è bello sapere come funzionano i computer. – citelao

+1

È importante se sei preoccupato per ciò che accade se metti un carattere 'NUL' in un' String'. Tuttavia, se lo fai, è discutibile che tu stia usando 'String' erroneamente ... perché un carattere' NUL' non dovrebbe apparire nel testo * reale *. (Ma accetto che ci siano casi d'uso in cui si vorrebbe comunque consentire 'NUL' in un' String'.) –

7

Mi piacerebbe sapere che se java definisce stringa come terminata null.

No. Una stringa è definita come una sequenza di lunghezza fissa di valori char. Tutti i valori possibili di char (da 0 a 65535) possono essere utilizzati in una stringa. Non esiste un valore "distinto" che significa che la stringa termina.

Quindi, come tracciano la fine della stringa? Usando la lunghezza?

Sì. Un oggetto String ha un campo privato length (in tutte le implementazioni che ho esaminato ...).

Se si desidera comprendere meglio come vengono implementate le stringhe Java, il codice sorgente per varie versioni è disponibile online. Google per "java.lang.String source".