Vi har tre slag av datatyper:
Typ | Innehåll | Defaultvärde | Storlek |
---|---|---|---|
boolean | true, false | false | 1 bit |
char | Tecken | \u000 | 16 bit |
byte | Heltal | 0 | 8 bit |
short | Heltal | 0 | 16 bit |
int | Heltal | 0 | 32 bit |
long | Heltal | 0 | 64 bit |
float | Flyttal | 0.0 | 32 bit |
double | Flyttal | 0.0 | 64 bit |
Vid en deklaration
int x;
får x
defaultvärde (i detta fall, 0
).
Några viktiga skillnader mot C/C++:
boolean
, byte
och char
.(Vad gäller för C/C++?)
Typen representerar ett sanningsvärde. Den genereras av
relationsoperatorer (till exempel ==
, <
).
if
och while
-satser kräver att alla sanningsvärden representeras som
boolean
.
Om du använder en variabel b
som är deklarerad som boolean kan du
skriva
if(b) ...för att testa om
b
är sann eller
if(!b) ...för att testa om
b
är falsk. Du behöver inte jämföra med nåt annat
värde.
Om du definierar en metod som returnerar en boolean kan du skriva (till exempel)
boolean even(int n) { return n%2==0; }Här är det överflödigt att skriva en if-sats.
En char
är 16 bitar. Java arbetar internt med tecken och strängar i
Unicode-representation.
Unicode (http://unicode.org/) är ett ambitiöst projekt som strävar efter att omfatta alla levande och utdöda språk. Naturligtvis kan man inte rymma alla tänkbara tecken i 16 bitar. Istället måste vissa tecken i Unicode representeras med flera char.
Grundregeln är att ett tal kan automatiskt omvandlas till ett tal av en vidare representation.
(Exempel: int
-> long
, int
-> double
, float
-> double
)
Ett heltal kan omvandlas till en mindre representation via en uttrycklig omvandling.
En heltalsoperation (tex +
) returnerar alltid ett värde av typ int
eller long.
Så om b
är en variabel av typ byte
kommer b+1
att vara av typ int
.
Därför accepteras tilldelningen
b = b + 1
inte av Javas kompilator.
Det är viktigt att du tar dig tid att studera detta, särskilt om du har stor erfarenhet av C eller C++.
Till skillnad från C gäller att:
Det räcker alltså inte med att deklarera en array, du måste skriva programkod för att skapa arrayen.
Så här kan det se ut när man deklarerar en array och initierar den:
int[] a = new int [10];
Om du vill kan du ersätta storleken (10
) med ett uttryck så att
storleken bestäms vid körning. Här måste man skilja på variabeln a
som
referererar till arrayen, och den datastruktur som skapas när man
utför new int [10]
. Variabeln a
kan referera till olika arrayer under
körning så man kan säga att storleken är dynamisk. Det går dock inte
att ändra storleken på en array. När en array har skapats behåller den
sin storlek.
Vid indexering av arrayer kontrolleras index. Om arrayen a
har skapats
enligt ovan (med 10 element) kommer de här uttrycken att ge
felmeddelanden:
a[-1]
a[10]
Man kan initiera en array genom att ange dess initialvärde:
int[] a = {1, 2, 3};
Initialvärdena kan beräknas vid körning:
int[] a = {1, n+1, 2*n, n*n};
Betrakta
int[] a = new int [10];
int[] b = a;
a
och b
refererar till samma array!
"null
" står för ingen array.
int[] a = null;
betyder samma sak som
int[] a;
Storlek på array ges av .length
.
int[] a = new int[10]; int x = a.length; a = new int[100]; int y = a.length;
I exemplet tilldelas x
värdet 10
och y
värdet 100
.
Ett exempel på nåt som är enkelt att göra i Java men är svårt i C/C++.
static void main (String args[]) { int[] a = {1,2,3}; int[] b = {99, 98, 97, 93, 92, 91}; int[] temp; temp = a; a = b; b = temp; System.out.println("b[0] = " + b[0]); }
Vad skrivs ut?