public ImmutableIntArray subArray(int startIndex, int endIndex) {
    """
	Returns a new immutable array containing the values in the specified range.
	
	<p><b>Performance note:</b> The returned array has the same full memory footprint as this one
	does (no actual copying is performed). To reduce memory usage, use {@code subArray(start,
	end).trimmed()}.
    """
    Preconditions.checkPositionIndexes(startIndex, endIndex, length());
    return startIndex == endIndex
        ? EMPTY
        : new ImmutableIntArray(array, start + startIndex, start + endIndex);
  }
public ImmutableIntArray subArray(int startIndex, int endIndex) {
    Preconditions.checkPositionIndexes(startIndex, endIndex, length());
    return startIndex == endIndex
        ? EMPTY
        : new ImmutableIntArray(array, start + startIndex, start + endIndex);
  }
public ImmutableIntArray subArray ( int startIndex , int endIndex ) { Preconditions . checkPositionIndexes ( startIndex , endIndex , length ( ) ) ; return startIndex == endIndex ? EMPTY : new ImmutableIntArray ( array , start + startIndex , start + endIndex ) ; }
Returns a new immutable array containing the values in the specified range.

<p><b>Performance note:</b> The returned array has the same full memory footprint as this one
does (no actual copying is performed). To reduce memory usage, use {@code subArray(start,
end).trimmed()}.
Returns a new immutable array containing the values in the specified range .