Reparto variable de referencia sin los paréntesis dobles

HPH:

Teniendo en cuenta el siguiente dos clases:

class A {}

class B extends A {
    int b;
}

En base a la siguiente tabla de operadores de precedencia: http://www.cs.bilkent.edu.tr/~guvenir/courses/CS101/op_precedence.html .

Tanto los operadores ()y .tienen la misma prioridad y se evalúan de izquierda a derecha (asociatividad).

A a = new B();
assert (B)a.b == 0;

el fragmento de código anterior debe compilar y afirma con éxito como el operador paréntesis se evalúa primero (casting referencia aa tipo B), entonces el acceso de la referencia fundido bvariable miembro que devuelve un valor de 0.

¿Por qué es la afirmación anterior no es el caso?

Andreas:

Usted está confundiendo los () paréntesis en precedencia 15 con la ( type ) conversión de tipo Unario en precedencia 13.

La . selección de miembros en precedencia 15 es más alta que la conversión de tipo, por lo que (B)a.blos medios (B) (a.b), por lo que tiene que escribir ((B) a).bpara conseguir lo que desea.

parte de tabla de precedencia

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=199297&siteId=1
Recomendado
Clasificación