Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Dybere Ind I String | String Avanceret
Java Udvidet

bookDybere Ind I String

Hvordan Strings faktisk fungerer i Java

Du kender allerede til, hvad en String er, og hvordan man arbejder med den. Dette kapitel dækker de teoretiske aspekter af, hvad der ligger bag en String.

Lad os undersøge den underliggende repræsentation af String-værdier i Java. Oprindeligt blev String implementeret som et array af char-værdier, hvilket var ligetil og intuitivt. Senere blev det dog ændret til et array af byte-værdier. Lad os forstå begrundelsen for denne ændring.

En char-variabel i Java optager 2 bytes hukommelse, mens en byte-variabel kun kræver 1 byte. Ved at anvende byte-værdier kan vi markant reducere hukommelsesforbruget og kun bruge en fjerdedel af pladsen.

Men hvordan kan en String rumme forskellige tegn, inklusive ikke-numeriske? Mekanismen ligner den, der bruges for en char-variabel. Vi udnytter ASCII-tabellen, hvor numeriske data kortlægges til specifikke tegn, hvilket muliggør repræsentation af et bredt udvalg af tegn i en String.

Lad os se på en illustration, der repræsenterer String-værdien "Hello":

Cellerne indeholder elementer af typen byte, som vi henter fra ASCII-tabellen. Vi kan endda i koden se det præcise byte-array, der er gemt i værdien af en String-variabel. Dette kan gøres ved hjælp af metoden getBytes().

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-værdierne er identiske med dem, der vises i diagrammet ovenfor. Derudover, hvis du er interesseret, kan du henvise til ASCII-tabellen og sammenligne koden for hvert element med den tilsvarende værdi.

Vi kan manipulere dette byte[]-array, som vi får fra et String-objekt.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 1

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

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

bookDybere Ind I String

Stryg for at vise menuen

Hvordan Strings faktisk fungerer i Java

Du kender allerede til, hvad en String er, og hvordan man arbejder med den. Dette kapitel dækker de teoretiske aspekter af, hvad der ligger bag en String.

Lad os undersøge den underliggende repræsentation af String-værdier i Java. Oprindeligt blev String implementeret som et array af char-værdier, hvilket var ligetil og intuitivt. Senere blev det dog ændret til et array af byte-værdier. Lad os forstå begrundelsen for denne ændring.

En char-variabel i Java optager 2 bytes hukommelse, mens en byte-variabel kun kræver 1 byte. Ved at anvende byte-værdier kan vi markant reducere hukommelsesforbruget og kun bruge en fjerdedel af pladsen.

Men hvordan kan en String rumme forskellige tegn, inklusive ikke-numeriske? Mekanismen ligner den, der bruges for en char-variabel. Vi udnytter ASCII-tabellen, hvor numeriske data kortlægges til specifikke tegn, hvilket muliggør repræsentation af et bredt udvalg af tegn i en String.

Lad os se på en illustration, der repræsenterer String-værdien "Hello":

Cellerne indeholder elementer af typen byte, som vi henter fra ASCII-tabellen. Vi kan endda i koden se det præcise byte-array, der er gemt i værdien af en String-variabel. Dette kan gøres ved hjælp af metoden getBytes().

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-værdierne er identiske med dem, der vises i diagrammet ovenfor. Derudover, hvis du er interesseret, kan du henvise til ASCII-tabellen og sammenligne koden for hvert element med den tilsvarende værdi.

Vi kan manipulere dette byte[]-array, som vi får fra et String-objekt.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 1
some-alt