这段代码如何理解?能解释一下吗

不废话,直接上代码:

//int i = 3;这一句是我加上的
String greeting = "Hello";
int index = greeting.offsetByCodePoints(0, i);
System.out.println(index);
int cp = greeting.codePointAt(index);
System.out.println(cp);
//得到第i个码点

今天在JAVA书里发现了这样一个代码段。主要是不理解码点啥意思。以及结果如何得到的。为了更加深入的分析代码,我尝试定义了i 为3,但实际上原本书上的代码是没有这一段定义的,书上只是说这段代码用来得到第i个码点。但是我不理解他咋得到的。过程是什么。我尝试定义了i并运行了程序。程序返回的值是108,那我就更不理解了,是如何得到cp的值为108的?我又尝试将i的值修改为了2,结果是一样的,i=2时cp的值仍然为108,这个时候我就更迷茫了,实在理解不了为什么所以发了这个问题,希望有人能够解答我的疑惑,以及详细介绍代码是如何工作的以及为什么cp的值不管i是3还是2,cp仍然等于108.希望回答者能够讲解详细,越详细容易理解更容易得到采纳,谢谢!


不明白是因为你没有把类String下的这两个方法搞清楚:
1.public int offsetByCodePoints​(int index,int codePointOffset)
index - 要偏移的索引,codePointOffset - 代码点的偏移量
返回该String内的索引,该索引与给定的index由codePointOffset代码点偏移。
2.public int codePointAt​(int index)
返回指定索引处的字符(Unicode代码点)
重点是返回指定索引处的字符是Unicode编码,什么是Unicode你可以自己去了解下,奇妙的是你两次把i的值设为23,
而恰恰字符"hello"中两个l的索引分别是23;l对应的Unicode值就是108,所以你两次得到的cp值就是108,你把i的值改成0,1,5试试。
提示:最后cp的输出进行强转为(char)类型你就明白了

i=3:

img

i=1:

img