Po wykonaniu instrukcji
arr = new String [3][4];
odnoœnik arr identyfikuje 3-elementow¹ tablicê odnoœników do 4-elementowych tablic odnoœników do
obiektów klasy String (ka¿dy z 3 odnoœników ma wartoœæ ró¿n¹ od null, ale ka¿dy z pozosta³ych ma wartoœæ
null).
_______________________________________________________________________________________
Operatory
Wykaz operatorów języka, z podaniem ich priorytetów i wiązań znajduje się w Dodatku Priorytety operatorów.
Rezultatem każdej z wymienionych tu operacji jest zmienna. Każde wyrażenie określone przez operację jest
chwilowÄ… nazwÄ… tej zmiennej. To, czy jest l-nazwÄ… wynika z opisu operacji.
Operatory konwersji
Operatorem konwersji jest ( Type). Wi¹zanie operatora konwersji jest prawe.
Np. (double)(int)12.8 == (double)((int)12.8)
Operacja konwersji ma postaæ
( Type) exp
w której Type jest nazw¹ typu docelowego, a exp jest wyra¿eniem poddawanym konwersji.
Rezultatem konwersji jest zmienna typu " Type", zainicjowana wartoœci¹ wyra¿enia exp po przekszta³ceniu jej
do typu " Type".
198
Uwaga: Jeœli typem docelowym jest tablica odnoœników, to w nazwie typu nie mog¹ wyst¹piæ rozmiary
tablicy.
Na przyk³ad
String str[] = { "Hello", "World" };
Object obj[] = (Object [])str;
System.out.print((String)obj[0]); // Hello
system.out.print(obj[1]); // World
Konwersje nieodnoÅ› nikowe
Rezultatem konwersji nieodnoœnikowej (np. z typu " double" do " int") jest zmienna typu " Type", zainicjowana wartoœci¹ wyra¿enia exp po przekszta³ceniu jej do typu " Type".
Na przyk³ad
System.out.print(12.8); // 12.8
System.out.print((double)(int)12.8); // 12
Konwersje odnoÅ› nikowe
Konwersja odnoœnikowa jest poprawna tylko wówczas, gdy jest dopuszczalna i wykonalna. Rezultatem poprawnej konwersji odnoœnikowej (np. z typu " Vector" do " Object") jest odnoœnik zainicjowany wartoœci¹
argumentu.
Konwersja odnoœnikowa jest dopuszczalna tylko wówczas, gdy jest to¿samoœciowa (np. z typu " Vector" do
" Vector") albo gdy polega na przekszta³ceniu z klasy do nadklasy (np. z " Vector" do " Object"), z klasy do podklasy (np. z " Object" do " Vector") albo z klasy do implementowanego przez ni¹ interfejsu (np. z " Vector"
do " Cloneable").
Konwersja odnoœnikowa jest wykonalna tylko wówczas, gdy jest dopuszczalna, a wyra¿enie
exp instanceof Type
(por. opis operatora instanceof) ma wartoϾ true.
Na przyk³ad
String city = "Warsaw";
Object obj = city; // konwersja niejawna
city = (String)obj; // konwersja jawna
Vector vec = (Vector)obj; // błąd (konwersja niewykonalna)
Operatory zwiÄ™ kszenia i zmniejszenia
Operatorem zwiêkszenia jest ++ ( plus, plus), a operatorem zmniejszenia jest --( minus, minus). Ka¿dy z nich mo¿e wyst¹piæ w postaci przyrostkowej albo przedrostkowej. Wi¹zanie operatora przyrostkowego jest lewe, a
przedrostkowego prawe.
Argument operacji zwiêkszenia i zmniejszenia musi byæ l-nazw¹ zmiennej.
Np.
fix--
++++fix == ++(++fix) // błąd (++fix nie jest l-nazwą)
199
Operacje przyrostkowe
Przyrostkowa operacja zwiêkszenia ma postaæ
var++
a przyrostkowa operacja zmniejszenia ma postaæ
var--
w których var jest wyra¿eniem arytmetycznym (m.in. typu " char").
Wyra¿enie var++ jest nazw¹ zmiennej tymczasowej zainicjowanej wyra¿eniem var. Skutkiem ubocznym
wykonania operacji jest zwiêkszenie wartoœci zmiennej var o 1.
Wyra¿enie var-- jest nazw¹ zmiennej zainicjowanej wyra¿eniem var. Skutkiem ubocznym wykonania operacji
jest zmniejszenie wartoœci zmiennej var o 1.
Na przyk³ad
int fix = 12;
int fix1 = fix--;
System.out.print(fix); // 11
System.out.print(fix1); // 12
Operacje przedrostkowe
Przedrostkowa operacja zwiêkszenia ma postaæ
++ var
a przedrostkowa operacja zmniejszenia ma postaæ
-- var
w których var jest wyra¿eniem arytmetycznym (m.in. typu " char").
Wyra¿enie ++ var jest l-nazw¹ zmiennej var. Skutkiem ubocznym wykonania operacji jest zwiêkszenie
wartoœci zmiennej var o 1.
Wyra¿enie -- var jest l-nazw¹ zmiennej var. Skutkiem ubocznym wykonania operacji jest zmniejszenie
wartoœci zmiennej var o 1.
Na przyk³ad
int fix = 10;
int fix1 = ++fix;
System.out.print(fix); // 11
System.out.print(fix1); // 11
Operatory zachowania i zmiany znaku
Operatorami zachowania i zmiany znaku s¹ + ( plus) i - ( minus). Wi¹zanie tych operatorów jest prawe.
Np. -+var == -(+var)
Operacja zachowania znaku ma postaæ
200
+ exp
a operacja zmiany znaku ma postaæ
- exp
w których exp jest wyra¿eniem arytmetycznym.
Wyra¿enie + exp oraz wyra¿enie - exp jest nazw¹ zmiennej takiego samego typu jakiego jest wyra¿enie exp, ale po poddaniu go promocjom (np. z typu " char" do " int").
Na przyk³ad
char fix = '2';
System.out.print(fix); // 2
System.out.print(+fix); // 50 (kod cyfry 2)
|