String is still a type of Object (requiring GC handling of reference
counters), as you can do Object[] o = stringArray.clone(); without
casting.  (other way not so)

https://www.javaspecialists.eu/archive/Issue124.html says there is
hardly any difference, so I don't think we need to fight this one out
and can just go with the cleanest code :)

On 16 February 2018 at 11:22, sebb <seb...@gmail.com> wrote:
> On 16 February 2018 at 10:01, Stian Soiland-Reyes <st...@apache.org> wrote:
>> I agree in general for .clone() on objects - and I'm trying to move
>> away from using .clone() in that Commons RDF fluent mutable/immutable
>> builder (See COMMONSRDF-49).
>>
>> But this is an Object[] - a native type.
>
> Huh?
>
> The code says String[], which is native as it's final.
>
> Object[] may not be native
>
>> I must admit I am not sure what is really the preferred way - I
>> thought .clone() is best as the VM can copy an array natively however
>> it wants, while with Arrays.copyOf it might have to check if length is
>> the same before doing anything clever.
>
> In the specific case of String[] it might be OK to use clone, but in
> general it's better to use the proper JVM methods and not try to
> second-guess how efficient they are.
>
>> On 13 February 2018 at 18:58, Gilles <gil...@harfang.homelinux.org> wrote:
>>> On Tue, 13 Feb 2018 18:40:13 +0000, sebb wrote:
>>>>
>>>> On 13 February 2018 at 09:31, Gilles <gil...@harfang.homelinux.org> wrote:
>>>>>
>>>>> On Tue, 13 Feb 2018 00:16:13 +0000 (UTC), st...@apache.org wrote:
>>>>>>
>>>>>>
>>>>>> Repository: commons-csv
>>>>>> Updated Branches:
>>>>>>   refs/heads/CSV-216 637ad2d7a -> f66a83901
>>>>>>
>>>>>>
>>>>>> CSV-216: Avoid Arrays.copyOf()
>>>>>
>>>>>
>>>>>
>>>>> Why?
>>>>
>>>>
>>>> Agreed
>>>>
>>>>>> as .clone() will do
>>>>>
>>>>>
>>>>>
>>>>> We should rather avoid using "clone()".
>>>>
>>>>
>>>> Again: why?
>>>
>>>
>>> There are many discussions about this topic on the web.[1]
>>> My point is that using "clone()" is not good advice.
>>>
>>> Gilles
>>>
>>> [1] E.g. http://vojtechruzicka.com/java-cloning-problems/
>>>
>>>
>>>> It's not clear why Arrays.copyOf(0 is considered bad, nor why clone()
>>>> is considered bad.
>>>>
>>>>
>>>>> Gilles
>>>>>
>>>>>
>>>>>> -- at least until someone tries to do
>>>>>> .withValue(x) in an out-of-range column
>>>>>>
>>>>>>
>>>>>> Project: http://git-wip-us.apache.org/repos/asf/commons-csv/repo
>>>>>> Commit:
>>>>>> http://git-wip-us.apache.org/repos/asf/commons-csv/commit/f66a8390
>>>>>> Tree: http://git-wip-us.apache.org/repos/asf/commons-csv/tree/f66a8390
>>>>>> Diff: http://git-wip-us.apache.org/repos/asf/commons-csv/diff/f66a8390
>>>>>>
>>>>>> Branch: refs/heads/CSV-216
>>>>>> Commit: f66a83901bd026369a2e8d522bd567eb2ef3f8c0
>>>>>> Parents: 637ad2d
>>>>>> Author: Stian Soiland-Reyes <st...@apache.org>
>>>>>> Authored: Fri Feb 9 16:49:51 2018 +0000
>>>>>> Committer: Stian Soiland-Reyes <st...@apache.org>
>>>>>> Committed: Tue Feb 13 00:14:52 2018 +0000
>>>>>>
>>>>>>
>>>>>>
>>>>>> ----------------------------------------------------------------------
>>>>>>  src/main/java/org/apache/commons/csv/CSVRecord.java | 4 ++--
>>>>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>>>>
>>>>>>
>>>>>> ----------------------------------------------------------------------
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> http://git-wip-us.apache.org/repos/asf/commons-csv/blob/f66a8390/src/main/java/org/apache/commons/csv/CSVRecord.java
>>>>>>
>>>>>>
>>>>>> ----------------------------------------------------------------------
>>>>>> diff --git a/src/main/java/org/apache/commons/csv/CSVRecord.java
>>>>>> b/src/main/java/org/apache/commons/csv/CSVRecord.java
>>>>>> index 979119f..2be5c49 100644
>>>>>> --- a/src/main/java/org/apache/commons/csv/CSVRecord.java
>>>>>> +++ b/src/main/java/org/apache/commons/csv/CSVRecord.java
>>>>>> @@ -199,7 +199,7 @@ public class CSVRecord implements Serializable,
>>>>>> Iterable<String> {
>>>>>>      public final CSVRecord immutable() {
>>>>>>         if (isMutable()) {
>>>>>>                 // Subclass is probably CSVMutableRecord, freeze values
>>>>>> -               String[] frozenValue = Arrays.copyOf(values,
>>>>>> values.length);
>>>>>> +               String[] frozenValue = values.clone();
>>>>>>                 return new CSVRecord(frozenValue, mapping, comment,
>>>>>> recordNumber, characterPosition);
>>>>>>         } else {
>>>>>>                 return this;
>>>>>> @@ -260,7 +260,7 @@ public class CSVRecord implements Serializable,
>>>>>> Iterable<String> {
>>>>>>         if (isMutable()) {
>>>>>>                 return this;
>>>>>>         }
>>>>>> -               String[] newValues = Arrays.copyOf(values,
>>>>>> values.length);
>>>>>> +               String[] newValues = values.clone();
>>>>>>         return new CSVMutableRecord(newValues, mapping, comment,
>>>>>> recordNumber, characterPosition);
>>>>>>         }
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>
>>
>>
>>
>> --
>> Stian Soiland-Reyes
>> http://orcid.org/0000-0001-9842-9718
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> For additional commands, e-mail: dev-h...@commons.apache.org
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>



-- 
Stian Soiland-Reyes
http://orcid.org/0000-0001-9842-9718

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to