Certificación java 6 cap 4
-
Upload
srbichoraro -
Category
Education
-
view
635 -
download
0
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