Mi chiedevo perché Java e altri linguaggi di programmazione implementassero (apparentemente) funzioni ridondanti come:
"foobar".startsWith("bar", 3);
// same as
"foobar".substring(3).startsWith("bar");
// or even indexOf(str, offset), regionMatches(...)
C'è una ragione dietro a questo?