syntax - for - string kotlin
Operador interesante ''==='' en Kotlin (1)
Según lo documented , representa la igualdad referencial :
La igualdad referencial se verifica mediante la operación === (y su contraparte negada! ==). a === b se evalúa como verdadero si y solo si a y b apuntan al mismo objeto.
Igualdad referencial significa que dos referencias apuntan al mismo objeto. Por instancia:
fun main(args: Array<String>) {
val number1 = Integer(10) // create new instance
val number2 = Integer(10) // create new instance
val number3 = number1
// check if number1 and number2 are Structural equality
println(number1 == number2) // prints true
// check if number1 and number2 points to the same object
// in other words, checks for Referential equality
println(number1 === number2) // prints false
// check if number1 and number3 points to the same object
println(number1 === number3) // prints true
}
Compare esto con el código de Java a continuación:
public static void main(String[] args) {
Integer number1 = new Integer(10); // create new instance
Integer number2 = new Integer(10); // create new instance
Integer number3 = number1;
// check if number1 and number2 are Structural equality
System.out.println(number1.equals(number2)); // prints true
// check if number1 and number2 points to the same object
// in other words, checks for Referential equality
System.out.println(number1 == number2); // prints false
// check if number1 and number3 points to the same object
System.out.println(number1 == number3); // prints true
}
Tu ejemplo
Además, como se documenta aquí , "el boxeo de números no conserva la identidad". Entonces, boxedA
tendrá una identidad, pero anotherBoxedA
tendrá otra identidad. Ambos tienen igualdad estructural, pero no igualdad referencial.
¿Pero por qué funciona el segundo? Debido a que el tipo Kotlin Int
corresponde al tipo int
Java. Las dos variables comparadas en el segundo ejemplo son valores de tipo primitivo, no objetos. Por lo tanto, para ellos la igualdad de referencia es exactamente igual a la igualdad regular.
¿Qué operador ''==='' hace en Kotlin? ¿Como funciona? ¿Podemos comprobar la igualdad de referencia?
val a: Int = 10000
print(a === a) // Prints ''true''
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA === anotherBoxedA) // !!!Prints ''false''!!!
pero en el caso
var a : Int = 1000
var b : Int = 1000
println(a === b) // print ''true'' !!!
val a: Int = 1000
y val b: Int = 1000
no está en el rango -128..127
, pero aún ===
es verdadero o el compilador en algunos casos entiende que se puede tomar un valor?