de-vraag
  • Klausimai
  • Žymos
  • Vartotojai
Pranešimai
Apdovanojimai
Registracija
Užsiregistravę gausite pranešimus apie atsakymus ir komentarus į savo klausimus.
Prisijungti
Jei jau turite paskyrą, prisijunkite ir patikrinkite naujus pranešimus.
Už pridėtus klausimus, atsakymus ir komentarus bus skiriami apdovanojimai.
Daugiau
Šaltinis
Redaguoti
Honza Brabec
Honza Brabec
Question

Kodėl "Java" +=, -=, *=, /= sudėtiniams priskyrimo operatoriams nereikalingas liejimas?

Iki šiol maniau, kad, pvz:

i += j;

buvo tik trumpinys:

i = i + j;

Bet jei pabandysime tai:

int i = 5;
long j = 8;

Tuomet i = i + j; nebus kompiliuojamas, bet i += j; bus kompiliuojamas gerai.

Ar tai reiškia, kad iš tikrųjų i += j; yra trumpinys, reiškiantis kažką panašaus į šį i = (i tipas) (i + j)?

3539 2012-01-03T10:10:32+00:00 3
 GMachado
GMachado
Redaguotas klausimas priešpietr rugsėjis 2018 в 7:37
Programavimas
operators
casting
java
variable-assignment
assignment-operator
Popular videos
The Assignment Operator in Java
The Assignment Operator in Java
prieš 2 metus
#3.4 Java Assignment Operators. Java Tutorial for Beginners
#3.4 Java Assignment Operators. Java Tutorial for Beginners
prieš 5 metus
Java - Assignment Operators
Java - Assignment Operators
prieš 4 metus
« Ankstesnis
Kitas »
Šis klausimas turi 1 atsakymas atsakymų anglų kalba, norėdami juos perskaityti prisijunkite prie savo paskyros.
Solution / Answer
Lukas Eder
Lukas Eder
priešpietr sausis 2012 в 10:15
2012-01-03T10:15:23+00:00
Daugiau
Šaltinis
Redaguoti
#15096446

Kaip visada, į šiuos klausimus atsakymą pateikia JLS. Šiuo atveju §15.26.2 Sudėtiniai priskyrimo operatoriai. Ištrauka:

Sudėtinė priskyrimo išraiška, kurios forma yra E1 op= E2, yra lygiavertė E1 = (T)((E1) op (E2)), kur T yra E1 tipas, išskyrus tai, kad E1 įvertinamas tik vieną kartą.

Pavyzdys iš §15.26.2

[...] toliau pateiktas kodas yra teisingas:

short x = 3; x += 4.6;

ir jo rezultatas yra x reikšmė 7, nes jis yra lygiavertis:

short x = 3; x = (short)(x + 4,6);

Kitaip tariant, jūsų prielaida yra teisinga.

 Radiodef
Radiodef
Redaguotas atsakymas popietr gegužė 2015 в 1:28
Chapter 15. Expressions
docs.oracle.com
2389
0
 Thirler
Thirler
priešpietr sausis 2012 в 10:17
2012-01-03T10:17:35+00:00
Daugiau
Šaltinis
Redaguoti
#15096448

Labai geras klausimas. Java kalbos specifikacija patvirtina jūsų pasiūlymą.

Pavyzdžiui, toliau pateiktas kodas yra teisingas:

short x = 3; x += 4,6;

ir gaunama x reikšmė 7, nes ji yra lygiavertė:

trumpas x = 3; x = (short)(x + 4,6);

 Keiwan
Keiwan
Redaguotas atsakymas popietr balandis 2017 в 7:11
Chapter 15. Expressions
docs.oracle.com
244
0
 dku.rajkumar
dku.rajkumar
priešpietr sausis 2012 в 10:15
2012-01-03T10:15:48+00:00
Daugiau
Šaltinis
Redaguoti
#15096447

jums reikia iš long į int tiesiogiai išversti i = i + l, tada jis bus sukompiliuotas ir duos teisingą išvestį.

i = i + (int)l;

arba

i = (int)((long)i + l); // this is what happens in case of += , dont need (long) casting since upper casting is done implicitly.

tačiau += atveju tai veikia gerai, nes operatorius netiesiogiai atlieka tipo atrinkimą iš dešiniojo kintamojo tipo į kairiojo kintamojo tipą, todėl nereikia atlikti aiškaus atrinkimo.

 dku.rajkumar
dku.rajkumar
Redaguotas atsakymas priešpietr sausis 2012 в 10:27
89
0
Pridėti klausimą
Kategorijos
Visi
Technologijos
Kultūra / poilsis
Gyvenimas / Menai
Mokslas
Profesionalus
Verslas
Vartotojai
Visi
Naujas
Populiarus
1
mohidil qodirova
Registruota prieš 2 dienas
2
Jasur Fozilov
Registruota prieš 2 dienas
3
Zuxriddin Muydinov
Registruota prieš 3 dienas
4
Денис Анненский
Registruota prieš 5 dienas
5
365
Registruota prieš 1 savaitę
DE
ES
FR
ID
JA
KO
LT
PT
RU
ZH
© de-vraag 2022
Šaltinis
stackoverflow.com
pagal licenciją cc by-sa 3.0 nurodant autorystę