The output from the following code is 123 because substring takes from beginIndex to EndIndex – 1. However, I am surprised how char here is understood as 3 (int) because substring take two ints. What is the concept behind this?
String x = "12345";
char a = 3;
x = x.substring(0, a);
System.out.println(x);
This goes all the way back to C, where
charis in essence a narrow integer type and gets implicitly converted tointwhenever necessary.In Java, this is technically known as a “widening primitive conversion”, and is covered in section 5.1.2 of the JLS.