TC should be the right-hand operand in Java 8 Language Specification -
if @ java 8 language specification §15.26.1
- otherwise, value of index subexpression used select component of array referred value of array reference subexpression.
this component variable; call type sc. also, let tc type of left-hand operand of assignment operator determined @ compile time. there 2 possibilities:
- if tc primitive type, sc same tc.
the value of right-hand operand converted type of selected array component, subjected value set conversion (§5.1.13) appropriate standard value set (not extended-exponent value set), , result of conversion stored array component.
- it says "let tc type of left-hand operand of assignment operator", tc left operand , sc component of array , type of right operand.
so, code goes this:
int tc = 15;
int[] sc = {1,2,3,4,5};
tc = sc[0];
- next weird things, says "the value of right-hand operand converted type of selected array component"
execution 1: value of of right-hand operand
sc[0]
1.
execution 2: 1 converted type of selected array componentsc[0]
.
execution 3: 1 converted int.
- "and result of conversion stored array component"
execution 4: 1 stored in
sc[0]
.
if follow step, code:
tc = sc[0];
is never happened, because sc[0]
stored itself.
it should says :
- otherwise, value of index subexpression used select component of array referred value of array reference subexpression.
this component variable; call type sc. also, let tc type of right-hand operand of assignment operator determined @ compile time. there 2 possibilities:
- if tc primitive type, sc same tc.
the value of right-hand operand converted type of selected array component, subjected value set conversion (§5.1.13) appropriate standard value set (not extended-exponent value set), , result of conversion stored array component.
so code this:
int tc = 15;
int[] sc = {1,2,3,4,5};
sc[0] = tc;
would run, , value of tc
stored sc[0]
my question: right?
it seems have misread context section of jls.
the section quoting starts with
if left-hand operand array access expression (§15.10.3), possibly enclosed in 1 or more pairs of parentheses
the array on left hand side, in
t[0] = 1;
i'm not sure why think implies otherwise, , explicitly dealing assignment array elements.
the particular problem clause addressing is:
interface tc {}; class sc implements tc {}; class rc implements tc {}; tc[] tcarray = new sc[1]; tcarray[0] = new rc();
that code (ignoring syntax shortcuts) compiles, required fail @ runtime arraystoreexception
.
Comments
Post a Comment