Do not box primitives for 'primitive == object'

NB user-defined 'equals' can violate contract for 'Object#equals', e.g.,
it can be asymmetric.
Thus we can't avoid boxing for 'object == primitive'.
This commit is contained in:
Dmitry Petrov
2017-07-14 15:18:19 +03:00
parent fa42f202fa
commit 8e9c0294fe
33 changed files with 828 additions and 116 deletions

View File

@@ -0,0 +1,26 @@
fun testBoolean1(a: Boolean, b: Boolean?) = a == b
fun testBoolean2(a: Boolean, b: Boolean?) = a != b
fun testChar1(a: Char, b: Char?) = a == b
fun testChar2(a: Char, b: Char?) = a != b
fun testByte1(a: Byte, b: Byte?) = a == b
fun testByte2(a: Byte, b: Byte?) = a != b
fun testShort1(a: Short, b: Short?) = a == b
fun testShort2(a: Short, b: Short?) = a != b
fun testInt1(a: Int, b: Int?) = a == b
fun testInt2(a: Int, b: Int?) = a != b
fun testLong1(a: Long, b: Long?) = a == b
fun testLong2(a: Long, b: Long?) = a != b
// 2 booleanValue
// 2 charValue
// 2 byteValue
// 2 shortValue
// 2 intValue
// 2 longValue
// 0 valueOf
// 0 areEqual

View File

@@ -0,0 +1,26 @@
fun testBoolean1(a: Boolean, b: Any?) = a == b
fun testBoolean2(a: Boolean, b: Any?) = a != b
fun testChar1(a: Char, b: Any?) = a == b
fun testChar2(a: Char, b: Any?) = a != b
fun testByte1(a: Byte, b: Any?) = a == b
fun testByte2(a: Byte, b: Any?) = a != b
fun testShort1(a: Short, b: Any?) = a == b
fun testShort2(a: Short, b: Any?) = a != b
fun testInt1(a: Int, b: Any?) = a == b
fun testInt2(a: Int, b: Any?) = a != b
fun testLong1(a: Long, b: Any?) = a == b
fun testLong2(a: Long, b: Any?) = a != b
// 2 booleanValue
// 2 charValue
// 2 byteValue
// 2 shortValue
// 2 intValue
// 2 longValue
// 0 valueOf
// 0 areEqual