Единственный способ узнать это - проанализировать код.Это потому, что varargs по сути является функцией времени компиляции и не меняет способ работы программы.
Если есть сомнения, я всегда копирую массив.Если вы не знаете, что это приведет к проблемам с производительностью.
Кстати: вы можете сделать следующее.
MyCompositeObjects(MyObjects o1, MyObjects... objects) {
MyCompositeObjects(MyObjects[] objects) {
Однако это скорее всего будет противоположно тому, что вы хотите.
Другой вариант - использовать статическую фабрику.
private MyCompositeObjects(MyObjects[] objects) {
this.objects = objects;
}
MyCompositeObjects create(MyObjects... objects) {
return new MyCompositeObjects(objects.close());
}
MyCompositeObjects createNotCopied(MyObjects... objects) {
return new MyCompositeObjects(objects, false);
}
Используйте более громоздкое имя метода для менее безопасной версии.Это означает, что если метод выбирается без особого обдумывания, более вероятно, что будет использоваться безопасная версия.