Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Dypere inn i String | Avansert Streng
Java Utvidet

bookDypere inn i String

Hvordan strenger faktisk fungerer i Java

Du kjenner allerede til hva en String er og hvordan den brukes. Dette kapittelet tar for seg de teoretiske aspektene ved hva som ligger bak en String.

La oss utforske den underliggende representasjonen av String-verdier i Java. Opprinnelig ble String implementert som et array av char-verdier, noe som var enkelt og intuitivt. Senere gikk man over til å bruke et array av byte-verdier. La oss forstå begrunnelsen for denne endringen.

En char-variabel i Java opptar 2 byte minne, mens en byte-variabel kun krever 1 byte. Ved å bruke byte-verdier kan vi redusere minnebruken betydelig, og kun bruke en fjerdedel av plassen.

Men hvordan kan en String håndtere ulike tegn, inkludert ikke-numeriske? Mekanismen ligner på den for en char-variabel. Vi benytter oss av ASCII-tabellen, hvor numeriske data tilordnes bestemte tegn, slik at et bredt spekter av tegn kan representeres i en String.

Her er en illustrasjon som viser String-verdien "Hello":

Cellene inneholder elementer av typen byte, som vi henter fra ASCII-tabellen. Vi kan til og med se i koden det eksakte byte-arrayet som lagres i verdien til en String-variabel. Dette kan gjøres ved å bruke getBytes()-metoden.

Main.java

Main.java

copy
12345678910111213141516
package com.example; public class Main { public static void main(String[] args) { String hello = "Hello"; byte[] bytes = hello.getBytes(); printArray(bytes); } static void printArray(byte[] bytes) { for (byte element: bytes) { System.out.print(element + " "); } System.out.println(); } }

Vi kan se at byte-verdiene er identiske med de som vises i diagrammet ovenfor. I tillegg, hvis du er interessert, kan du se på ASCII-tabellen og sammenligne koden til hvert element med tilsvarende verdi.

Vi kan manipulere denne byte[]-tabellen som vi får fra et String-objekt.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 1

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

Can you explain why Java switched from char[] to byte[] for String storage?

How does Java handle non-ASCII characters in Strings if it uses byte arrays?

Can you show an example of using getBytes() with a String in Java?

Awesome!

Completion rate improved to 2.63

bookDypere inn i String

Sveip for å vise menyen

Hvordan strenger faktisk fungerer i Java

Du kjenner allerede til hva en String er og hvordan den brukes. Dette kapittelet tar for seg de teoretiske aspektene ved hva som ligger bak en String.

La oss utforske den underliggende representasjonen av String-verdier i Java. Opprinnelig ble String implementert som et array av char-verdier, noe som var enkelt og intuitivt. Senere gikk man over til å bruke et array av byte-verdier. La oss forstå begrunnelsen for denne endringen.

En char-variabel i Java opptar 2 byte minne, mens en byte-variabel kun krever 1 byte. Ved å bruke byte-verdier kan vi redusere minnebruken betydelig, og kun bruke en fjerdedel av plassen.

Men hvordan kan en String håndtere ulike tegn, inkludert ikke-numeriske? Mekanismen ligner på den for en char-variabel. Vi benytter oss av ASCII-tabellen, hvor numeriske data tilordnes bestemte tegn, slik at et bredt spekter av tegn kan representeres i en String.

Her er en illustrasjon som viser String-verdien "Hello":

Cellene inneholder elementer av typen byte, som vi henter fra ASCII-tabellen. Vi kan til og med se i koden det eksakte byte-arrayet som lagres i verdien til en String-variabel. Dette kan gjøres ved å bruke getBytes()-metoden.

Main.java

Main.java

copy
12345678910111213141516
package com.example; public class Main { public static void main(String[] args) { String hello = "Hello"; byte[] bytes = hello.getBytes(); printArray(bytes); } static void printArray(byte[] bytes) { for (byte element: bytes) { System.out.print(element + " "); } System.out.println(); } }

Vi kan se at byte-verdiene er identiske med de som vises i diagrammet ovenfor. I tillegg, hvis du er interessert, kan du se på ASCII-tabellen og sammenligne koden til hvert element med tilsvarende verdi.

Vi kan manipulere denne byte[]-tabellen som vi får fra et String-objekt.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 1
some-alt