new for example syntax kotlin

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?