gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:33:05 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 。这是任何性能优化吗? char 比 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 - 为什么Java中string.indexOf方法的参数是int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735391/

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