Duvida em codigo

import java.math.BigInteger;

public class MyClass {
public static void main(String args[]) {
System.out.println(new MyClass().run());
}

public String run() {
	String temp = BigInteger.ONE.shiftLeft(1000).toString();

	int sum = 0;
	for (int i = 0; i < temp.length(); i++){
	    	System.out.println( temp.charAt(i));
		sum += temp.charAt(i) - '0';
		System.out.println(sum);
	}
	
	return Integer.toString(sum);
}

}

gostaria de saber o que temp.charAt(i) - ‘0’; faz

temp.charAt(i) retorna o caractere na posição i da String armazenada na variável temp, como um char pode ser tratado como um número, - ‘0’ subtrai 48 (que é valor numérico de ‘0’) do char retornado por charAt.