Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Ѐилософия Java3Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 18

Автор Π‘Ρ€ΡŽΡ ЭккСль

Π° = 4

Π½ΠΎ нСльзя ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ константС β€” ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‰Π΅Π³ΠΎ выраТСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, запись 4 = Π° нСдопустима).

Для ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² присвоСниС выполняСтся Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅, Π° Π½Π΅ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎ присвоСниС сводится ΠΊ простому ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСста Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅. НапримСр, Ссли ΠΊΠΎΠΌΠ°Π½Π΄Π° Π° = b выполняСтся для ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Ρ‚ΠΎ содСрТимоС b просто копируСтся Π² Π°. ЕстСствСнно, ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния Π° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° Π¬. Для программиста ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ выглядит Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ.

ΠŸΡ€ΠΈ присвоСнии ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² всС мСняСтся. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π²Ρ‹ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ со ссылкой, поэтому присвоСниС Β«ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒΒ» Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ссылки ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСста Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ с = d для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ end ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ соотвСтствовала Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ссылка d. Π‘ΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ дСмонстрируСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

//: operators/Assignment java // ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ ряд хитростСй import static net.mindview.util Print.*,

class Tank {

int level,

}

public class Assignment {

public static void main(String[] args) { Tank tl = new TankO. Tank t2 = new TankO, tl level = 9; t2 level = 47,

printC'l tl level " + tl level + \ t2 level " + t2 level);

tl = t2;

print("2- tl level- " + tl level +

t2.levelβ€’ " + t2 level), tl.level = 27.

print("3 tl.level- " + tl level + t2.level. " + t2 level).

}

} /* Output

1 tl level. 9. t2.level. 47

2 tl level- 47. t2 level. 47

3: tl.level. 27. t2 level: 27

*/// ~

Класс Tank ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ прост, ΠΈ Π΄Π²Π° Π΅Π³ΠΎ экзСмпляра (tl ΠΈ t2) ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° main(). ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ level для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра ΠΏΡ€ΠΈΠ΄Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ значСния, Π° Π·Π°Ρ‚Π΅ΠΌ ссылка t2 присваиваСтся tl, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ tl измСняСтся. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках программирования ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ tl ΠΈ t2 Π±ΡƒΠ΄ΡƒΡ‚ нСзависимы всС врСмя, Π½ΠΎ ΠΈΠ·-Π·Π° присвоСния ссылок ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° tl отраТаСтся Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ t2! Π­Ρ‚ΠΎ происходит ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ tl ΠΈ t2 содСрТат ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ссылки, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. (Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ ссылка, которая ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π»Π°ΡΡŒ Π² tl ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»Π° Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 9, Π±Ρ‹Π»Π° пСрСзаписана Π²ΠΎ врСмя присвоСния ΠΈ фактичСски потСряна; Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ вскорС ΡƒΠ΄Π°Π»Π΅Π½ сборщиком мусора.)

Π­Ρ‚ΠΎΡ‚ Ρ„Π΅Π½ΠΎΠΌΠ΅Π½ совмСщСния ΠΈΠΌΠ΅Π½ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ синонимиСй (aliasing), ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½Π° являСтся основным способом Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² Java. Но Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли совмСщСниС ΠΈΠΌΠ΅Π½ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ? Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ присвоСниС ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

tl.level = t2 level;

ΠŸΡ€ΠΈ этом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сохранит Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Π½Π΅ «выбросит» ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…, «привязав» ссылки tl ΠΈ t2 ΠΊ СдинствСнному ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. ВскорС Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ прямая Ρ€Π°Π±ΠΎΡ‚Π° с полями Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, это нСпростой вопрос, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° Π²Π°ΠΌ достаточно Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ присвоСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΈΡ‚ΡŒ Π² сСбС Π½Π΅ΠΌΠ°Π»ΠΎ ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠ².

Π‘ΠΎΠ²ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ Π²ΠΎ врСмя Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π‘ΠΎΠ²ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ:

// operators/PassObject java

// ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ

// Π½Π΅ Ρ‚Π°ΠΊ. ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ.

import static net.mindview.util.Print.*;

class Letter { char c;

}

public class PassObject {

static void f(Letter y) { y.c = 'z';

}

public static void main(String[] args) { Letter x = new LetterO; x.c = 'a';

printCl; x.c; " + x.c); f(x);

print("2: x.c: " + x.c);

}

} /* Output 1: x.c: a 2: x.c: z */ ///

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках программирования ΠΌΠ΅Ρ‚ΠΎΠ΄ f() создал Π±Ρ‹ копию своСго ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Letter Ρƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ своСй области дСйствия. Но ΠΈΠ·-Π·Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ссылки строка

Ρƒ.с = 'z';

Π½Π° самом Π΄Π΅Π»Π΅ измСняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° f().

Π‘ΠΎΠ²ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ β€” слоТныС Ρ‚Π΅ΠΌΡ‹. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π² Ρ‚Π°ΠΊΠΈΡ… случаях Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Π»ΠΎΠ²ΡƒΡˆΠ΅ΠΊ.

АрифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ матСматичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΎ всСх языках программирования: слоТСниС (+), Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ (-), Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (/), ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ (*) ΠΈ остаток ΠΎΡ‚ дСлСния Π½Π°Ρ†Π΅Π»ΠΎ (%). Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π°Ρ†Π΅Π»ΠΎ ΠΎΠ±Ρ€Π΅Π·Π°Π΅Ρ‚, Π° Π½Π΅ округляСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π’ Java Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ укорочСнная Ρ„ΠΎΡ€ΠΌΠ° записи для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ произвСсти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ присвоСниС. Она обозначаСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π·Π½Π°ΠΊΠΎΠΌ равСнства ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ для всСх ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² языка (ΠΊΠΎΠ³Π΄Π° Π² этом Π΅ΡΡ‚ΡŒ смысл). НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ±Π°Π²ΠΈΡ‚ΡŒ 4 ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ… ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Ρ… += 4.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт использованиС арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

//: operators/MathOps.java // ДСмонстрация матСматичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, import java.util.*;

import static net.mindview.util.Print.*;

public class MathOps {

public static void main(String[] args) {

// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ раскрутка Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° случайных чисСл

57

Random rand = new Random(47); int i, j, k;

// Π’Ρ‹Π±ΠΎΡ€ значСния ΠΎΡ‚ 1 Π΄ΠΎ 100: j = rand.nextlnt(lOO) + 1: printC'j : " + j): ΠΊ = rand.nextlnt(lOO) + 1. printC'k : " + k): i = J + k;

printC'j + ΠΊ : " + i); 1 - J - k:

printC'j - ΠΊ :" + i); i = ΠΊ / j,

printC'k / j : " + i): i = ΠΊ * j;

printC'k * j β€’ " + i): i = ΠΊ % j;

printC'k % j . " + i). j X= k:

printC'j %/ ΠΊ β€’ " + j); // ВСсты для вСщСствСнных чисСл float u.v.w; // Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ double v = rand.nextFloatO; printC'v . " + v); w = rand.nextFloatO; print("w : " + w), u = v + w;

printC'v + w : " + u); u = v - w;

printC'v - w : " + u). u = v * w;

printC'v * w : " + u); u = v / w;

printC'v / w : " + u): // ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ‚Π°ΠΊΠΆΠ΅ относится ΠΊ Ρ‚ΠΈΠΏΠ°ΠΌ // char, byte, short, int, long ΠΈ double: u += v:

printC'u += v . " + u): u -= v;

printC'u -= v : " + u); u *= v:

printC'u *= v : " + u): u /= v;

printC'u /= v : " + u).

}

} /* Output: j β€’ 59 k 56 j + k β€’ 115 j - k β€’ 3 k / j : 0 k * j : 3304 k % j : 56 j %= k : 3 v β€’ 0.5309454 w : 0.0534122 v + w β€’ 0 5843576 v - w : 0.47753322 v * w : 0.028358962

v / w 9 940527 u += v : 10.471473 u -= v 9 940527 u *= v 5 2778773 u /= v : 9 940527 */// ~

Для получСния случайных чисСл создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Random. Если ΠΎΠ½ создаСтся Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя для раскрутки Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹Π΄Π°Π²Π°Π»ΠΈΡΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ числа.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ случайных чисСл, вызывая ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Random: nextlnt() ΠΈ nextFloat() (Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ nextLong() ΠΈ nextDouble()). АргумСнт nextlnt() Π·Π°Π΄Π°Π΅Ρ‚ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… чисСл. НиТняя Π³Ρ€Π°Π½ΠΈΡ†Π° Ρ€Π°Π²Π½Π° 0, Π½ΠΎ для прСдотвращСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ дСлСния Π½Π° 0 Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ смСщаСтся Π½Π° 1.

Π£Π½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ плюс ΠΈ минус

Π£Π½Π°Ρ€Π½Ρ‹Π΅ минус (-) ΠΈ плюс (+) внСшнС Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ…Ρ‹ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² соотвСтствии с контСкстом использования. НапримСр, ΠΊΠΎΠΌΠ°Π½Π΄Π°

Ρ… = -Π°;

ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ смысл. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° разбСрСтся, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚

Ρ… = Π° * -Π¬;

Π½ΠΎ Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ яснСС Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Ρ… = Π° * (-Π¬):

Π£Π½Π°Ρ€Π½Ρ‹ΠΉ минус мСняСт Π·Π½Π°ΠΊ числа Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ. Π£Π½Π°Ρ€Π½Ρ‹ΠΉ плюс сущСствуСт «для симмСтрии», хотя ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий.

АвтоувСличСниС ΠΈ Π°Π²Ρ‚ΠΎΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅

Π’ Java, ΠΊΠ°ΠΊ ΠΈ Π² Π‘, сущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сокращСний. БокращСния ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ написаниС ΠΊΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.

Π”Π²Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… сокращСния β€” это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ увСличСния (ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°) ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ (Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°) (Ρ‚Π°ΠΊΠΆΠ΅ часто Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ автоматичСского приращСния ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ). ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° записываСтся Π² Π²ΠΈΠ΄Π΅ β€” ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†ΡƒΒ». ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° обозначаСтся символами ++ ΠΈ позволяСт Β«ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†ΡƒΒ». НапримСр, Ссли пСрСмСнная Π° являСтся Ρ†Π΅Π»Ρ‹ΠΌ числом, Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ++Π° Π±ΡƒΠ΄Π΅Ρ‚ эквивалСнтно (Π° = Π° + 1). ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π½ΠΎ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Π΅ΠΉ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² сущСствуСт Π² Π΄Π²ΡƒΡ… вСрсиях β€” прСфиксной ΠΈ постфиксной. ΠŸΡ€Π΅Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ++ записываСтся ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π° ΠΏΡ€ΠΈ постфиксном ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ слСдуСт послС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ выраТСния. Аналогично, ΠΏΡ€ΠΈ прСфиксном Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ β€” указываСтся ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π° ΠΏΡ€ΠΈ постфиксном β€” послС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ выраТСния. Для прСфиксного ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ++Π° ΠΈ β€”Π°) сначала выполняСтся опСрация, Π° Π·Π°Ρ‚Π΅ΠΌ выдаСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Для постфиксной записи (Π°++ ΠΈ Π°β€”) сначала выдаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ лишь Π·Π°Ρ‚Π΅ΠΌ выполняСтся опСрация. НапримСр:

// operators/AutoInc java

import static net mindview util Print *.

public class Autolnc {

public static void main(String[] args) { int i = 1; printC'i : print("++i print("i++ printC'i β€’ print C'--i printC'i--printC'i

i); + ++i) + i++) i). + --i) + i-) i),

// ΠŸΡ€Π΅Ρ„иксный ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚

// ΠŸΠΎΡΡ‚фиксный ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚

// ΠŸΡ€Π΅Ρ„иксный Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚

// ΠŸΠΎΡΡ‚фиксный Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚

} /* Output-i . 1 ++i β€’ 2 i++ . 2 i . 3 -i . 2 1-- 2

i β€’ 1 *///.-

Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании прСфиксной Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ получаСтся послС выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ с постфиксной Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΎΠ½ доступСн Π΄ΠΎ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ СдинствСнныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² присваивания), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт. (Π˜Π½Π°Ρ‡Π΅ говоря, ΠΎΠ½ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ свой ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ вмСсто простого использования Π΅Π³ΠΎ значСния.)

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ происхоТдСниС названия языка Π‘++; подразумСваСтся «шаг Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π‘Β». Π’ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Ρ€Π΅Ρ‡Π΅ΠΉ, посвящСнных Java, Π‘ΠΈΠ»Π» Π”ΠΆΠΎΠΉ (ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΅Π³ΠΎ создатСлСй) сказал, Ρ‡Ρ‚ΠΎ Β«Java=C++β€”Β» (Β«Π‘ΠΈ плюс плюс минус минус»). Он ΠΈΠΌΠ΅Π» Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Java β€” это Π‘++, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠ±Ρ€Π°Π½ΠΎ всС, Ρ‡Ρ‚ΠΎ затрудняСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈ поэтому язык стал Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ³Π°ΡΡΡŒ Π²ΠΏΠ΅Ρ€Π΅Π΄, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ аспСкты языка, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€ΠΎΡ‰Π΅, ΠΈ всС ΠΆΠ΅ Java Π½Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Π‘++.