Returns an unmodifiable view (read-only) of the specified list. Attempts to modify the returned List, whether direct or via its iterator, result in an UnsupportedOperationException.
Since the list created by this method is a view of the original list, modifying the original will reflect the changes in it:

package com.logicbig.example.collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class UnmodifiableListExample {
public static void main(String... args) {
List<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c");
System.out.println("Original list: " + list);
List<String> list2 = Collections.unmodifiableList(list);
System.out.println("unmodifiable list: " + list2);
//modifying the original
list.add("d");
System.out.println("unmodifiable list: " + list2);
}
}
Output
Original list: [a, b, c]
unmodifiable list: [a, b, c]
unmodifiable list: [a, b, c, d]
JDK 25
Modifying itself will throw the exception:

package com.logicbig.example.collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class UnmodifiableListExample2 {
public static void main(String... args) {
List<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c");
List<String> list2 = Collections.unmodifiableList(list);
list2.add("d");
}
}
Output
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add (Collections.java:1093)
at com.logicbig.example.collections.UnmodifiableListExample2.main (UnmodifiableListExample2.java:19)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
at java.lang.reflect.Method.invoke (Method.java:565)
at org.codehaus.mojo.exec.AbstractExecJavaBase.executeMainMethod (AbstractExecJavaBase.java:402)
at org.codehaus.mojo.exec.ExecJavaMojo.executeMainMethod (ExecJavaMojo.java:142)
at org.codehaus.mojo.exec.AbstractExecJavaBase.doExecClassLoader (AbstractExecJavaBase.java:377)
at org.codehaus.mojo.exec.AbstractExecJavaBase.lambda$execute$0 (AbstractExecJavaBase.java:287)
at java.lang.Thread.run (Thread.java:1474)
JDK 25