Dybere 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
12345678910111213141516package 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.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
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
Dybere 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
12345678910111213141516package 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.
Tak for dine kommentarer!