I written a simple program to check the difference.
public static void main(String[] args) throws IOException, InterruptedException,
        PrinterException
{
  //Verify array remains immutable.
  String[] str =  {"a","b","c"};
  String[] strings  = str.clone();
  //change returned array
  strings[2]= "d";
  System.out.println(Arrays.toString(str));
  System.out.println(Arrays.toString(strings));
  String[] stringsCopy = Arrays.copyOf(str, str.length);
  stringsCopy[2]= "d";
  System.out.println(Arrays.toString(str));
  System.out.println(Arrays.toString(stringsCopy));
  //peformance
  long before = System.currentTimeMillis();
  for(int i=0;i<Integer.MAX_VALUE;i++)
  {
      str.clone();
  }
  System.out.println("Time Required for Clone: "+ (System.currentTimeMillis()-before));
  //peformance
  long beforeCopy = System.currentTimeMillis();
  for(int i=0;i<Integer.MAX_VALUE;i++)
  {
      Arrays.copyOf(str, str.length);
  }
  System.out.println("Time Required for Copy of: "+ (System.currentTimeMillis()-beforeCopy));
}
And it outputs 
[a, b, c]
[a, b, d]
[a, b, c]
[a, b, d]
Time Required for Clone: 26288
Time Required for Copy of: 25413
So if you see in both case String[] is immutable and performance is almost same thought Arrays.copyOf() is slightly faster on my machine.
Update
I changed program to create large array[100 strings] rather than small array.
  String[] str =  new String[100];
  for(int i= 0; i<str.length;i++)
  {
      str[i]= Integer.toString(i);
  }
And moved copy of method before clone method. With below results.
 Time Required for Copy of: 415095
 Time Required for Clone: 428501
Which are again more of same. Please do not ask me to run the test again as it takes a while :(
Update 2
For String array 1000000 and for number of iterations 10000
Time Required for Copy of: 32825
Time Required for Clone: 30138
copy of takes more time than clone