Casper <casper@jbr.dk> writes:
> Hvorfor må man ikke switche på en hex byte literal i Java?
Det må man skam også, bare man opfører sig ordentligt :)
> byte value = ...
> switch(value)
> {
> case 0xef: << Syntaks error
> return true;
> }
>
> ...men man må godt caste til en integer først og dernæst til byte:
....
> case (byte)(int)0xef:
....
Du behøver skam ikke cast'e til int første. En heltals-literal er
altid en integer med mindre andet er angivet (suffix L for long, F for
float, D for double, e.g., 0xdeadbeefbabe0123L, 42F)
Der er ikke nogen suffixer for mindre typer end int (byte, short,
char). Til gengæld vil int-literals automatisk blive omformet til den
passende type *hvis* tallet kan være i den. Som Thorbjørn pointerede,
så er din konstant for stor til at være i en byte.
> Virker da som en designfejl i Java. Som om en hex værdi i Java er tæt
> knyttet til en integer, og ikke bare en laverestående/abstrakt literal
> hvor basen (2,8,10,16...) er ligegyldig.
Det er alle heltalstalkonstanter, og så er der regler for hvornår
compileren må lave dem om til mindre typer.
/L 'kan stadig huske *lidt* af min "Java Programmer"'
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:
http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'