// This stub file will be read second.
// If any of these conflict with stubfile1,
// then the annotations in the stub file will be used.

import org.checkerframework.checker.nullness.qual.*;

package java.lang;

public final class String {
    public @Nullable String intern();
    public @NonNull String substring(@Nullable int beginIndex);
    String(@Nullable String arg0);
    void getChars(@Nullable int arg0, @NonNull int arg1, @NonNull char @NonNull [] arg2, int arg3);
}
