chào các anh chị, em mới nhập môn kotlin và gặp phải thắc mắc muốn nhờ anh chị giúp đỡ
em tìm được một ví dụ trên mạng như sau:
val a: Int = 100 val boxedA: Int? = a val anotherBoxedA: Int? = a val b: Int = 10000 val boxedB: Int? = b val anotherBoxedB: Int? = b println(boxedA === anotherBoxedA) // true println(boxedB === anotherBoxedB) // false
kết quả là true false
theo như họ giải thích thì kết quả như vậy là do cơ chế tối ưu bộ nhớ integer nullable từ -128 đến 127
nhưng sau khi em chuyển biến a và b thành nullable như sau
val a: Int? = 100 val boxedA: Int? = a val anotherBoxedA: Int? = a val b: Int? = 10000 val boxedB: Int? = b val anotherBoxedB: Int? = b println(boxedA === anotherBoxedA) // true println(boxedB === anotherBoxedB) // true
kết quả là true true
em đã tra gg khá nhiều mà k có kết quả, mong anh chị giúp đỡ ạ, em cảm ơn nhiều
Em dùng IntelliJ dịch code ra em sẽ thấy:
Ở trường hợp 1, nó sẽ dịch ra thành 2 đối tượng Integer nhưng do vấn đề boxed value nên những số nằm ngoài khoảng −128 and 127 sẽ không thể sử dụng dấu == được nên là false, trường hợp này em sẽ cần dụng equals
Ở trường hớp 2, nó dịch thẳng ra kết quả luôn rồi, thế nên không có gì cần phải nói thêm em ạ