68 lines
2.5 KiB
Plaintext
68 lines
2.5 KiB
Plaintext
== Why is this an issue?
|
|
|
|
While ``++hashCode++`` and ``++toString++`` are available on arrays, they are largely useless. ``++hashCode++`` returns
|
|
the array's "identity hash code", and ``++toString++`` returns nearly the same value. Neither method's output actually
|
|
reflects the array's contents. Furthermore, ``++contentHashCode()++`` and ``++contentToString()++`` are also useless on
|
|
arrays of array.
|
|
|
|
Instead, you should use:
|
|
|
|
* On array of objects or arrays: ``++contentDeepHashCode()++`` and ``++contentDeepToString()++``
|
|
* On array of primitives: ``++contentHashCode()++`` and ``++contentToString()++``
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,kotlin]
|
|
----
|
|
fun main() {
|
|
val primitiveArray = intArrayOf(1, 2, 3)
|
|
val objectArray = arrayOf("A", "B", "C")
|
|
val arrayOfArray = arrayOf(arrayOf("A", "B"), arrayOf("C", "D"))
|
|
|
|
println(primitiveArray.toString()) // Noncompliant, output: [I@2acf57e3
|
|
println(primitiveArray.hashCode()) // Noncompliant, output: 718231523
|
|
println(objectArray.toString()) // Noncompliant, output: [Ljava.lang.String;@506e6d5e
|
|
println(objectArray.hashCode()) // Noncompliant, output: 1349414238
|
|
println(arrayOfArray.toString()) // Noncompliant, output: [[Ljava.lang.String;@96532d6
|
|
println(arrayOfArray.contentToString()) // Noncompliant, output: [[Ljava.lang.String;@3796751b, [Ljava.lang.String;@67b64c45]
|
|
println(arrayOfArray.hashCode()) // Noncompliant, output: 157627094
|
|
println(arrayOfArray.contentHashCode()) // Noncompliant, output: 586055243
|
|
}
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,kotlin]
|
|
----
|
|
fun main() {
|
|
val primitiveArray = intArrayOf(1, 2, 3)
|
|
val objectArray = arrayOf("A", "B", "C")
|
|
val arrayOfArray = arrayOf(arrayOf("A", "B"), arrayOf("C", "D"))
|
|
|
|
println(primitiveArray.contentToString()) // Compliant, output: [1, 2, 3]
|
|
println(primitiveArray.contentHashCode()) // Compliant, output: 30817
|
|
println(objectArray.contentDeepToString()) // Compliant, output: [A, B, C]
|
|
println(objectArray.contentDeepHashCode()) // Compliant, output: 94369
|
|
println(arrayOfArray.contentDeepToString()) // Compliant, output: [[A, B], [C, D]]
|
|
println(arrayOfArray.contentDeepHashCode()) // Compliant, output: 98369
|
|
}
|
|
----
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::message.adoc[]
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::comments-and-links.adoc[]
|
|
endif::env-github,rspecator-view[]
|