Certificación java 6 cap 4

Post on 21-Jul-2015

635 views 0 download

Transcript of Certificación java 6 cap 4

Capítulo 4 - Operadores

Cubre el objetivo:

7.6 Write code that correctly applies the appropriate operators includingassignment operators (limited to: =, +=, -=), arithmetic operators (limited to:+, -, *, /, %, ++, --), relational operators (limited to: <, <=, >, >=, ==, !=), theinstanceof operator, logical operators (limited to: &, |, ^, !, &&, ||), and theconditional operator (? :), to produce a desired result. Write code thatdetermines the equality of two objects or two primitives.

Aunque ya se vio la mayoría de las implicaciones de usar el signo = en el capítulo pasado, los puntos a destacar son:

Cuando se asigna un primitivo hay que tener en cuenta el tamaño, debe saber cuando el casteo debe ser implícito o explícito, y cuando ocurre un truncamiento de datos

Recuerde que una variable de referencia no es un objeto, y que el símbolo = no es lo mismo que un método get.

Cuando se asigna una variable de referencia importa el tamaño, es decir si el objeto pertenece a una clase padre, a una subclase, a una interface, o a un array.

Existen operadores compuestos con el

símbolo igual, estos operadores sirven para

acortar las líneas de código.

y = y - 6; y -= 6;

x = x + 2 * 5; x += 2 * 5;

Existen 6 operadores relacionales (<, <=, >, >=, ==, and !=). Y sirven para comparar variables.

El uso de estos operadores siempre dan como resultado un booleano, por lo tanto es muy común usarlo en las sentencias if.

Animal = unknown

Animal = elephant

Animal = gray elephant

Animal = gray elephant

The animal is a gray elephant

A veces suele ponerse algo como esto

El if no tiene una comparación, es decir no se esta comparando si el valor de b es true o false, si no que se esta asignando a b true, este tipo de comparaciones siempre da true. Por lo tanto el código anterior resulta en “b is true”.

Otro punto que toca tener en cuenta es que los if siempre evalúan un boleano, por lo tanto esto arroja un error de compilación

Porque x es entero, y a asignarle a

x un 0 pues resulta un int, que no

es boolean y que el if no acepta

Para comparar dos variables se usa el

simbolo == para definir si son iguales, o !=

para ver si son diferentes.

Con estos operadores se pueden analizar

números, caracteres, booleanos y variables

de referencia.

Como puede ver, cuando un número punto

flotante es comparado con un entero y

tienen el mismo valor, la comparación ==

retorna true.

true

false

true

true

false

En el caso de las variables de referencia, a excepción de los wrapper la igualdad se da cuando dos variables contienen el mismo objeto unicamente.

Hay que tener cuidado porque a veces uno tiende a ver el valor contenido en el objeto, y aunque el valor sea igual si son dos objetos distintos pues no existe igualdad.

False, porque a y

b apuntan a

diferentes objetos

True, porque a y c

apuntan al mismo

objeto

Exit Exit

a c b

Los enums, al ser una colección de valores

constantes, pues no se manejan como los

objetos, aquí el comportamiento de la

igualdad (==) es el mismo que presenta el

método equals.

En este ejemplo tanto como == como equals dan true, porque

ambas variables contienen la misma constante del enum

==

Dot equals

Por medio de esta sentencia se puede definir cuando

un objeto es de un tipo en particular. Es decir

verifica que la propiedad de IS A sea correcta.

El instanceof también tiene en cuenta la herencia,

por ejemplo, cuando se usa el instanceof contra la

clase padre, es true también.

Aquí se verifica que s sea

un String, como es correcto

entonces imprime

S is a String

Incluso cuando el objeto que se esta

probando no es una instanciación correcta, el

instanceof arrojará true si el objeto del lado

izquierdo es compatible con el del lado

derecho.

A es compatible de b

Aunque a no hereda de b,

se imprime como true

porque son compatibles.

Finalmente es legal usar un null para validar un instanceof de una clase, pero el resultado siempre es false.

No se puede usar un instanceof, para comparar dos objetos que se encuentran en diferentes líneas de herencia, en caso que se haga sale un error de compilación

En ambos casos se hace

una comparación con null,

por lo tanto el resultado es

False false

Arroja un error de

compilación porque perro

no hereda de gato

Los operadores básicos son +, -, *, /.

El operador % es el residuo de la división

entre dos números.

El resultado de dividir 15

entre 5 es 4 y sobran 3,

entonces el valor de y es 3

La concadenación de cadenas se hace con el

símbolo +.

El punto que toca tener en cuanta que

cuando se mezclan números y cadenas,

cuando se hace esto, todo se vuelve cadena,

y se unen los números no se suma.

Si se cambia la última línea por esto

Como a es una cadena, el

resultado es:

String37

B y c son int, por leyes de

parentecis se agrupan b y c

que da 10 y esto se une a la

cadena

String10

El operador de incremento es ++, y el de

decremento es –-

Es importante tener en cuenta la posición en

que se encuentran, pues esto determina el

comportamiento que tendrá la instrucción.

Cuando el operador es un

posfijo, entonces ejecuto

la operación, en este caso

imprimir la variable y

después aumento en uno

Cuando el operador es un prefijo,

entonces aumento en uno, y luego

ejecuto la operación, en este caso

imprimir la variable

Aquí y = 3, x = 2, comparo

si 3 es igual a 2, siendo

falso, y luego aumento x

en 1. Ahora x vale 3

Aquí x = 3, y = 3, primero aumento y en

1, y vale entonces 4, luego comparo si x

es menor que y, como 3 es menor que 4

entonces es verdadero y entra al if El resultado es

X = 3 y = 4

Un operador condicional es una terna de

elementos que permiten evaluar expresiones

booleanas. La estructura de la sentencia es:

Por ejemplo:

x = (boolean expression) ? value to assign if true : value to assign if false

numOfPets = 3, como es

menor que 4, entra a “Pet

limit not exceeded” porque

es cierto

Operadores && y ||

Los operadores && (y acortado) y || (o

acortado), sirven para comparar dos decisiones

en un if,

Se caracterizan porque valida la primera

expresión,

En caso de && si la primera condición es false

entonces no evalúa el resto de la expresión y no

entra en la sentencia.

En el caso de || valida la primera condición si es

true, entonces no evalúa el resto de la expresión

y entra en la sentencia.

Operadores && y ||3 es menor que 5, imprime i<5, y

da como resultado true, y entra a

el cuerpo del if, imprimiedo

“Result is true”

Aquí no entra, porque al primero

ser true, este operador omite esta

sentencia

6 no es menor que 5,

imprime i>=5, y da como

resultado false

9 no es menor que 5, imprime

i>=5, y da como resultado false,

por lo tanto no entra a el cuerpo

del if

i < 5

Result is true

i >= 5

i >= 5

Operadores | y &

Estos operadores funcionan parecidos a los de las

diapositivas anteriores, la diferencia es que estos

si analizan siempre todas las condiciones de la

expresión Aquí z me vale 5, aumento en 1 y

comparo, como 6 es mayor que 5

entonces es true, y entra sin evaluar

la otra expresión, quedando al final

z valiendo 7

Aquí z vale 5, aumento en 1 y

comparo, 6 es mayor que 5, pero el

operador me dice que debo analizar la

otra expresión, por lo tanto aumento

en 7, 7 también es mayor que 6, entro

a la expresión, y al final z vale 8

Operador ^ (Xor)

El operador Xor, siempre evalúa ambos lados de

la expresión, y se caracteriza porque para que de

verdadero solo una expresión debe ser

verdadera.

true True

Ambos son verdaderos, por lo tanto el

resultado es:

xor false

El operador !

Cuando se usa el operador !, automáticamente lo

que hace el sistema es retornar el valor

contrario, es decir si es verdadero pone falso, y

viceversa.

What is the result?

A. null

B. life

C. universe

D. everything

E. Compilation fails

F. An exception is thrown at runtime

La respuesta correcta

es D

42 no es menor que 40, pot lo

tanto entra a evaluar la

expresión despues de los :

42 no es mayor que 50, por lo

tanto entra a evaluar la

expresión de los dos puntos

Al final el resultado de la sentencia es

“everything”

Qué es cierto?

A. One of them will compile, only one will be true

B. Two of them will compile, only one will be true

C. Two of them will compile, two will be true

D. Three of them will compile, only one will be true

E. Three of them will compile, exactly two will be true

F. Three of them will compile, exactly three will be true

Y los siguientes fragamentos de código

F1. if(f1 == f2)

F2. if(f1 == f2[2][1])

F3. if(x == f2[0][0])

F4. if(f1 == f2[1,1])

F5. if(f3 == f2[2])

De enunciado anterior podemos concluir De la opción F1 se puede decir que la sentencia

arroja un error de compilación, porque una variable no se puede comparar con un array.

De la función F2 se puede concluir que compila la sentencia, pero los valores 2.3 y 2.7 no son iguales, da falso.

De la función F3 se puede decir que la sentencia compila, y que al comparar el valor de x con la primitiva se maneja boxing y da igual.

De la función F4, se dice que no compila, no se puede acceder porque un array no se accede como f2[1,1] si no f2[1][1].

De la función F5, se puede decir que la sentencia compila, pero no da igual.

Por lo tanto podemos concluir que la respuesta correcta es D

Y la ejecución se hace con la sentencia

java Fork live2

Cuál es el resultado?

A. test case

B. production live2

C. test case live2

D. Compilation fails

E. An exception is thrown at runtime

La respuesta correcta es la E

Args en la posición 1 no existe, solo

la posición 0, el sistema arroja

una excepcion, llamada

ArrayIndexOutOfBoundsException

What is the result?

A. 9 foo47 86foo

B. 9 foo47 4244foo

C. 9 foo425 86foo

D. 9 foo425 4244foo

E. 72 foo47 86foo

F. 72 foo47 4244foo

G. 72 foo425 86foo

H. 72 foo425 4244foo

I. Compilation fails

El resultado es entonces la opción G

El resultado es 72 , porque el

primer carácter es un string

entonces se concadenan los

números

El resultado es foo425 , porque el

primer caracteres es un String,

entonces se concadenan los

números

El resultado 86Foo, los números se

suman, porque no hay string antes que

las variables numericas, y después se

asigna el String

Complete el bloque con las palabras del

fragmento, para que el resultado de 33

class Incr {

public static void main(String[] args) {

Integer x = 7;

int y = 2;

x _=*_ _x_;

y__ _=* _y_;

y__ _=* _y_;

x__ _=- _y_;

System.out.println(x);

}

}

What is the result? (Choose all that apply.)

A. 1

B. 2

C. 4

D. 6

E. 8

F. Compilation fails

El resultado es 4, la respuesta correcta es la C

Index vale 1, entonces tomo el

valor 1, y después lo aumento,

tomo el valor 2 y lo aimento otra

vez, queda al final la posición

[1][2]

Antes de iniciar el proceso,

asigno el valor en 1

What is the result?

A. same old

B. newly new

C. Compilation fails due to multiple errors

D. Compilation fails due only to an error on line 7

E. Compilation fails due only to an error on line 8

F. Compilation fails due only to an error on line 11

G. Compilation fails due only to an error on line 13

La ejecución del proceso, no presenta ningún error de compilación, la sentencia for recorre los valores de el enum, por lo tanto la secuencia asigna los valores a la variable d2, con M, T, W y TH, no sigue más porque el ciclo llega a F termina. Como son iguales impime same old, la respuesta es A

Which are true? (Choose all that apply.)

A. Compilation fails

B. x will be included in the output

C. y will be included in the output

D. z will be included in the output

E. An exception is thrown at runtime

La compilación no falla, ni arroja excepción,

la sentencia incluye a y únicamente. La

respuesta correcta es C

B = false, no es error de compilación, porque b

es un boleano, pero el resultado es falso, el

módulo de 21 y 5 es 1, y es falso también

entonces no imprime x

B1 es true, entonces entra e

imprime yB2 es falso, porqie en la primero

pregunta le asigne a b2 falso

Which two answers are true about the value of mask and the value of count at line 10? (Choose two.)

A. mask is 0

B. mask is 1

C. mask is 2

D. mask is 10

E. mask is greater than 10

F. count is 0

G. count is greater than 0