Ciao, questo è quello che devi fare.
Discutiamo brevemente la forza quando introduciamo gli archi e abbiamo detto che era una delle caratteristiche che rendevano gli archi
speciali e questo è dovuto al fatto che le ragazze carissime vengono immagazzinate in Donati.
Non guardiamo la stringa che tira l'accordo e quindi vedremo come GBM gestisce le stringhe e ammaccatamente
alla fine.
Fa anche i concetti usando una semplice demo ed è una lezione importante e anche interessante.
E molti sviluppatori non sanno di Trinkle o, anche se lo fanno, generalmente
non lo sono prima.
Cominciamo col capire come le stringhe sono memorizzate internamente da JVM quando create
usando la stringa che sono state create usando il Nuki, mentre Hustvedt guardava che è quando le stringhe vengono create usando stringhe letterali.
Se ricordate, abbiamo detto che tutti i valori letterali delle stringhe sono memorizzati in particolare la stringa della scheda
di memoria Off. Infatti, la stringa di memoria viene effettivamente acquisita dalle persone e voi sapete che è dove risiedono
tutti gli oggetti. Quindi il punto String include anche gli oggetti ma solo gli oggetti stringa sono creati usando stringhe
perché stringhe letterali Come lo stesso contenuto quindi condividono lo stesso spazio nella stringa.
Anche questo è stato discusso in precedenza ma nella prossima luce lo vedremo attraverso un esempio
di distanza successiva creata usando la nuova parola chiave questi oggetti stringa non sono diversi da oggetti di lavoro regolari.
Questo è un mucchio.
Ma vorrei anche aggiungere il loro spazio di archiviazione e non condividere lo spazio di archiviazione anche se due oggetti
stringa hanno lo stesso contenuto.
Diamo un'occhiata a un esempio per comprendere queste differenze.
Quindi qui abbiamo l'heap in heap.
Ora non disponiamo dell'istruzione in cui la variabile S1 è assegnata a.
Ciao, perché abbiamo una stringa letterale.
Come accennato in precedenza, JVM lo memorizzerebbe nello stinkeroo creando un oggetto stringa come si
offrirebbe Onsen.
Quindi, anche se è un letterale internamente, viene memorizzato come un oggetto stringa regolare ma all'interno della stringa.
Diciamo che abbiamo una variabile s2 ma è anche assegnata con un trapano simile.
Ciao.
E sappiamo anche che una stringa letterale Come sembrano i contenuti che condividono la stessa memoria in Stinkweed
Estival fanno riferimento allo stesso oggetto String che S1 fa riferimento ora cosa importante da notare qui
è che queste due affermazioni possono apparire ovunque nell'applicazione.
Possono essere in classi completamente diverse o anche in pacchetti completamente diversi del tutto.
Finché entrambe le istruzioni vengono eseguite come parte dello stesso processo GBM, verrà creato un solo oggetto
stringa per il letterale Hello I'm s1 s2.
Bene facendo riferimento a una variabile S3 viene assegnata con S1, quindi S3 farà ovviamente riferimento allo stesso oggetto String
nella stringa successiva, diciamo che abbiamo l'istruzione in cui la variabile x4 viene creata usando il
Nuki.
Anche questo è stato inizializzato con la X.
Ciao.
E sappiamo che questo creerebbe un oggetto stringa al di fuori della stringa.
Proprio come nel caso.
Qualsiasi oggetto grande
E per quanto riguarda il riferimento.
Tuttavia l'argomento del costruttore è strettamente vero.
Quindi JVM proverebbe ancora a creare un oggetto stringa per quel letterale nella stringa.
Ma dal momento che abbiamo già un oggetto stringa per il piccolo ciao nella stringa in riferimento ad esso viene
passato al costruttore.
Ma l'oggetto esistente corrispondente a Hello locale non era presente nell'input, quindi JVM avrebbe creato
un nuovo oggetto String nel pool e avrebbe passato un riferimento al nuovo oggetto String al costruttore.
Quindi per andare sulla stringa pull tutto ciò di cui abbiamo bisogno è una stringa letterale e non importa che sia letteralmente.
Sì, il letterale può anche essere parte di un sistema o di una dichiarazione di stampa.
E se hai questa affermazione e sappiamo che questo creerebbe anche un nuovo oggetto String fuori dalla
stringa.
Quindi, per quanto riguarda SSI, si fa riferimento a due oggetti stringa diversi anche se sono inizializzati con
lo stesso contenuto.
Quindi non c'è condivisione di storage come nel caso di uno.
Per quanto riguarda l'onestà e a causa di questo tipo di implementazione, facciamo un confronto di riferimento oggetto su
S1 onestamente.
Ne risulterebbe un valore ma poi faremo un oggetto di confronto fino ai registratori di volo e
N. S. UN..
Quindi, come puoi vedere, il vantaggio principale dell'uso di stringless close è che ci darebbe memoria.
Randall Ha lo stesso contenuto non solo per essere al 100% chiaro su ciò che abbiamo appena imparato.
Se solo questa affermazione è GBM e Contos stringa letterale ciao per la prima volta.
Quindi solo un oggetto stringa corrispondente al sotto ciao corrente è maggiore
della stringa e il riferimento ad esso è il capo del costruttore per costruire la nuova stringa.
Prole di Dick outskirt.
Essenzialmente in questo caso tutto questo viene creato.
Quindi tienilo a mente.
A volte può essere richiesto in un'intervista, ma letteralmente era già lì in primavera.
Quindi avrebbe creato un solo oggetto stringa al di fuori dello string pull look qualche altro specifico relativo
alla stringa pull.
Non sappiamo che una stringa memorizza fondamentalmente una singola copia di ogni stringa letterale nella stringa di Hamas
adorata.
Quindi tienilo a mente che puzzare i buchi con gli oggetti stringa.
Sappiamo anche che la palla a corde fa parte di esso.
So che esiste una sola copia di Stinkweed, detta anche tabella di stringhe.
Quindi questa è un'altra stringa di quarzo.
Su questo intero processo di costruzione di un polo si parla di string interning l'uno
sull'altro nel polo della stringa è chiamato come un motore su slingin Dhoni è supportato anche in
altri linguaggi come Python Ruby C-Sharp e anche in linguaggi di scripting come Gallois Savino può capire come l'internazionalizzazione delle
stringhe funziona a livello concettuale.
Vediamo come viene effettivamente fatto dietro le quinte di GBM Narbonne JVM e Contos astronomici per
la prima volta.
Fa due cose.
Crea un nuovo oggetto stringa con lo stesso contenuto della stringa scritta in nexted a Malta a quella
chiamata Intan sull'oggetto stringa creato.
Quindi c'è un metodo chiamato in fatto nella classe String e questo è ciò che è fatto che sta facendo
il crosscheck intermedio se c'è già un oggetto stringa nella stringa con lo stesso contenuto.
Se esiste, restituisce semplicemente un riferimento di quell'oggetto String esistente.
L'oggetto cosa creato è semplicemente abbandonare e sarà spazzatura raccolta dei rifiuti raccolta
sarà discussa più avanti nella JVM e un altro capitolo, ma una stringa non contiene
un oggetto stringa con lo stesso contenuto, quindi non importa che il nuovo oggetto String lo
creato nella stringa capirà che è riferimento, quindi non importa come il nome indica Dean, ma internando.
Ora se il simulatore non è disponibile, ancora una volta JVM controlla se non è importante chi
era in precedenza in un gruppo su un oggetto stringa inizializzato con questo piccolo spazio e riferimento a quell'istanza.
In effetti, questa è la prima cosa che JVM fa sempre ogni volta che viene rilevato un letterale e, se
non importa, non è stato precedentemente richiamato.
Solo allora fa i passi che vedi qui.
Non guardare un paio di esempi qui.
La concatenazione di Bulat Gross e questo è il risultato della concatenazione sarà anche a sua volta in quanto sarebbe anche un
valore letterale il cui valore è noto al momento della compilazione.
Ora in questo esempio abbiamo variabile come uno che è assegnato a un letterale ma variabile S2 è una
concatenazione di un letterale e di variabile come uno qui variabilis sarebbe valutato in fase di esecuzione.
Quindi non abbiamo un compilatore letterale, quindi questo non porterà alla creazione di un in sulla stringa risultante
che l'oggetto sarebbe creato al di fuori della stringa, ma è molto esplicitamente nel lavoro e fatto in questo modo sulla
variabile come poi in questo caso verrà creato un intent in questo caso, come si fa infine riferimento alla fine eseguita
nel pool di stringhe come sul lato sinistro del compito.
Abbiamo la variabile s2 in modo che possiamo internamente lavorare internamente.
Proprio come il modo in cui J. B. inquietante sul vecchio oggetto stringa che
come una sorta di risciacquo sarà ancora presente nell'heap e sarà idoneo per la garbage collection.
Quindi la domanda è Will Dunning esplicito da qualcosa che molto probabilmente non lo è.
Sembra essere meglio o essere utilizzato solo da GBM, ma in alcune applicazioni come il processo di verdammt di elaborazione del
linguaggio naturale un sacco di testo e un sacco di manipolazioni di stringhe l'accoppiamento o l'internazione esplicita.
Se pensiamo che verrebbero create molte stringhe identiche.
Tuttavia dipende dalla particolare applicazione e dovresti sperimentare e prendere la tua decisione.
Quindi è una bevanda mal riuscita.
E nel donare Andiamo ad alcune delle cose che abbiamo imparato attraverso una breve demo e potresti ricevere
chiamate. Trinkle è stato aggiunto alla classe demo di base.
Andiamo avanti e guardiamo il numeratore.
OK.
Ecco una nuova metrica sprinkle che è stata aggiunta alla demo class di base.
Quindi qui ci sono un sacco di dichiarazioni dichiarazioni che creano alcune stringhe.
E abbiamo anche alcune dichiarazioni di stampa che fanno alcuni test.
Quindi qui nelle dichiarazioni di dichiarazione stiamo creando un paio di stringhe sulla stringa che tira su almeno
una stringa fuori dalla stringa.
E fondamentalmente facciamo un confronto tra le occorrenze dell'oggetto e senza invocare esplicitamente un
metodo.
Un paio di pezzi e lo vedremo.
Quindi andiamo avanti e guardiamo a ciò che abbiamo qui nelle dichiarazioni.
Quindi inizialmente stiamo creando questa variabile come una che è un riferimento a un oggetto.
È inizializzato con il testo Ciao.
Quindi è una stringa letterale.
E così sappiamo che la stringa viene creata nella stringa.
Allo stesso modo abbiamo S2 qui.
Viene anche inizializzato con la stessa stringa letterale Hello.
Quindi dovrebbe anche puntare allo stesso oggetto stringa nella stringa letterale.
Quindi sappiamo che sappiamo anche che il ferro qui e S3.
Quindi siamo nel rooking e nel metodo di induzione sul blitter delle stringhe.
OK, quindi possiamo anche farlo.
Quindi questo è come un doppio interning qui perché questo è uno stagista e quindi
invochiamo ancora una volta non importa il cui oggetto principale è quello di creare un'istanza nella stringa bool.
Destra.
Sappiamo che non importa, muore.
Crea intenso.
Quindi è come un raddoppio qui dentro.
Ora come per questi creati utilizzando la nuova parola chiave.
Quindi qui una stringa viene creata una stringa al di fuori della stringa.
Ed è anche inizializzato con lo stesso con la stessa stringa letterale.
E per quanto condiviso è con noi e lo stiamo facendo.
Quindi quelle sono le diverse dichiarazioni.
Abbiamo solo alcuni confronti fatti qui.
E stiamo usando l'operatore uguale a quello che confrontiamo le diverse espressioni dell'oggetto.
Quindi andiamo avanti ed eseguiamo questo programma.
È già compilato e quindi possiamo esaminare le ragioni per cui possiamo analizzare.
Quindi questo è quello che abbiamo.
Quindi nella prima affermazione stiamo confrontando le province S1 e S2.
E poiché entrambi sono inizializzati con la stessa stringa letterale.
Quindi punterebbero allo stesso oggetto String nella stringa.
Ok, quindi abbiamo.
Quindi l'espressione restituisce TRUE è un confronto tra S1 e S2.
OK.
E S3 punta anche a un oggetto String nella stringa pull.
Quindi possiamo vederlo qui.
Quindi, ancora una volta si valuterà il vero e poi la prossima affermazione che stiamo confrontando con s S è divertente per il sorgente 1
è una stringa nella stringa di palle.
Per quanto riguarda è una stringa al di fuori della stringa.
Destra.
Quindi sarebbe falso.
E poi la quarta linea che stiamo invocando e interniamo.
Per quanto riguarda il diritto o qui.
Quindi questo fondamentalmente crea un fine fatto nella stringa.
Ma per quanto è inizializzato con la parola P ciao ciao letterale ma sappiamo che a sua volta è già lì
nel pool di stringhe perché tutte queste dichiarazioni qui.
Quindi in pratica non ne creerà uno nuovo.
Basterà riferirsi a un riferimento a questa intera espressione sarebbe un riferimento a
quell'oggetto stringa che è già presente nella stringa lo dirà.
Ma come uno e questa espressione punterebbero allo stesso oggetto String e la stringa potrebbe avere un
indizio qui.
Ora qui nella prima affermazione è una concatenazione tra due stringhe letterali.
Quindi questa cosa è.
Quindi sarebbe morto dopo una concatenazione o sarebbe stato aggiunto il letterale stringa.
Quindi questo sarebbe anche memorizzato nell'heap.
Voglio dire, mi dispiace per il tiro della corda ed è perché è cavo.
La concatenazione è vuota e si tratta già di un oggetto stringa con lo stesso contenuto nel libro
delle stringhe.
Questa espressione sarebbe anche Herald-Record vero in quella finale è una concatenazione Ma quando
questo testo conteneva Henchy e questa variabile S-5 Quindi se ci concatenato sicuramente è solo lo stesso testo Ciao.
Ma poiché questa è una variabile, non viene valutata fino al runtime.
Non sarei considerato come nicromo.
I record sono creati solo che sono noti al momento della compilazione.
OK, questa è la ragione per cui eseguiamo un credito se falso.
Ma se ricordi dalla nostra lezione sulle espressioni di commutazione, loro hanno detto che se rendiamo la variabile un finale questo è
chiamato come variabile costante.
E questo dà al compilatore semplicemente questo testo e lo leggerebbe al posto di questa variabile al momento della
compilazione, mescolandolo all'inseguimento lo scrive nel bytecode.
Quindi se lo rendi una variabile costante, allora sapresti che sarebbe considerato
come una stringa letterale e sarebbe l'espressione che valuterà come vero.
Questo sarà vero.
Così è se aggiungiamo questa parola chiave finale.
Quindi questo è tutto.
Quindi, per riassumere tutti i valori letterali delle stringhe verranno memorizzati nella stringa pull e quelli creati usando la
parola Nuki verranno ripristinati al di fuori della stringa pull.
E il vantaggio principale del toro seduto è che ottieni la stessa memoria sulle stringhe create nella stringa.
Va bene se hanno lo stesso contenuto.
Quindi l'approccio consigliato è quello di creare stringhe utilizzando stringhe letterali e non utilizzando la nuova parola chiave.
Quindi questo è tutto.
E questo nuovo metodo è lì nella base di Woodrum su di esso è già veramente appropriato andare.
Puoi vederlo nella sezione delle risorse in modo da poterlo scaricare e giocare con esso.
E questo è tutto.
E la felice codifica.
Grazie.