当前位置: 首页 > 面试题库 >

为什么string.indexOf方法的参数在Java中是int

柳弘方
2023-03-14
问题内容

我想知道为什么当描述为char时indexOf方法的参数为int。

public int indexOf(int ch)

Returns the index within this string of the first occurrence of the specified **character**

http://download.oracle.com/javase/1,5.0/docs/api/java/lang/String.html#indexOf%28int%29

Also, both of these compiles fine:
char c = 'p';
str.indexOf(2147483647);
str.indexOf(c);

a]基本上,我感到困惑的是java中的int是32位,而unicode字符是16位。

b]为什么不使用字符本身而不使用int。这是性能优化吗?字符比int难于表示吗?怎么样 ?

我认为这应该是简单的理由,这使我对此更加了解!

谢谢!


问题答案:

真正
原因是,indexOf(int)预计一个Unicode码点,而不是16位UTF-16“字符”。Unicode代码点的长度实际上最多为21位。

(较长代码点的UTF-16表示实际上是2个16位“字符”值。这些值分别称为前导和尾随替代;从D800 16到DBFF 16以及从DC00 16到DFFF
16;请参阅Unicode FAQ-UTF
-8,UTF-16,UTF-32和BOM
,以获取详细信息。)

如果您提供indexOf(int)的代码点> 65535,它将搜索 一对 编码该代码点的UTF-16字符。

这是由javadoc声明的(虽然不是很清楚),对代码的检查表明这确实是方法的实现方式。

为什么不只使用16位字符?

这很明显。如果这样做的话,将没有一种简单的方法来在字符串中定位大于65535的代码点。对于那些开发可能包含文本代码点的国际化应用程序的人来说,这将是一个主要问题。(许多所谓的国际化应用程序都错误地假设a
char代表代码点。通常并不重要,但越来越多地这样做了。)

但这对您没有任何影响。如果您的字符串仅由16位代码组成,或者仅由ASCII代码组成,则该方法仍然有效。



 类似资料:
  • 问题内容: 为什么Java中的main方法总是需要参数?为什么我们每次都要写,而不是在使用任何参数时才写? 这样的方法会生成编译器错误。由于我们从不对main方法使用任何参数,因此应允许这样做。 这不是面试问题。编程时才想到。 问题答案: 基本上,有四个答案: 因为那是它的设计方式。是的,我知道这是一个循环的原因。但是关键是这就是它的样子,并且不会改变。因此,除非您打算设计自己的语言,否则这个问题

  • 为什么Java中的main方法总是需要参数?为什么我们每次都要编写,而不是在使用任何参数时编写它? 像这样的方法会生成编译器错误。由于我们从不对main方法使用任何参数,因此应该允许这样做。 这不是面试问题。编程的时候突然想到的。

  • 问题内容: 我刚刚开始用Java编写程序。以下Java代码是什么意思? What is String[] args? When would you use these args? 源代码和/或示例优先于抽象解释 问题答案: 在Java中,包含提供的命令行参数作为对象数组。 换句话说,如果你运行你的程序作为然后将包含。 如果要输出的内容,可以像这样遍历它们…

  • Pandas DataFrame有一个重命名方法,它使用一个名为“index”的参数。我不理解文档中对参数的描述:DataFrame.rename 具体来说,我使用它就像文档网页上的示例: 我理解结果,但我不明白为什么要设置。 参数用于什么?为什么示例设置了?

  • 问题内容: 这些方法之间在功能上有区别吗? 编辑(从其他贡献者添加了此语法): 问题答案: 不,但第一个是首选样式。 编辑: 另一个选项是 此外,它还允许调用者使用varargs语法。

  • 问题内容: 有人可以告诉我参数在类的方法中用于什么吗? 这是从此处获取的示例代码: 我们应该经过什么? 我发现的是,从这里获取: 获取一个在数据集中指定位置显示数据的视图。您可以手动创建视图,也可以从XML布局文件中对其进行充气。当视图膨胀时,父视图(GridView,ListView …)将应用默认布局参数,除非您使用inflate(int,android.view.ViewGroup,bool