gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:09:48 24 4
gpt4 key购买 nike

我想知道为什么 indexOf 方法的参数是 int ,而描述是 char。

公共(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 。这是任何性能优化吗? chars 比 int 更难表示吗?怎么样?

我认为这应该是对此的简单推理,这让我更加了解它!

谢谢!

最佳答案

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

(较长代码点的 UTF-16 表示实际上是 2 个 16 位“字符”值。这些值称为前导和尾随代理项;D80016 到 DBFF16,和 DC0016 到 DFFF16;参见 Unicode FAQ - UTF-8, UTF-16, UTF-32 & BOM 了解详细信息。)

如果您给 indexOf(int) 一个代码点 > 65535,它将搜索对代码点进行编码的 UTF-16 字符。

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


Why not just use 16-bit characters ?

这很明显。如果他们那样做,就没有一种简单的方法可以在字符串中定位大于 65535 的代码点。对于开发文本可能包含此类代码点的国际化应用程序的人来说,这将是一个主要问题。 (许多据称国际化的应用程序错误地假设 char 代表一个代码点。这通常无关紧要,但越来越多地如此。)

但这对您应该没有任何影响。如果您的字符串仅包含 16 位代码……或者就此而言,仅包含 ASCII 代码,该方法仍然有效。

关于java - 为什么 string.indexOf 方法的参数在 Java 中是一个 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6210231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com