=0;i--) { s2+=s1.charAt(i); //-6ren">
gpt4 book ai didi

java - 程序中s2+=s1.charAt(i)是什么意思

转载 作者:行者123 更新时间:2023-12-01 17:05:31 27 4
gpt4 key购买 nike

我有这个程序

String s1="java";
String s2="";

for (int i=s1.length()-1;i>=0;i--)
{
s2+=s1.charAt(i); // Please explain this line.
}
System.out.println("The Reversal of "+s1+" is "+s2);

粗体标记的代码中到底发生了什么。

最佳答案

让我们看一下代码:

分配s1String “java”并分配 s2String “”。

String s1="java";
String s2="";

i = s1.length() - 1循环至i >= 0 向下

for (int i=s1.length()-1;i>=0;i--) {
s2+=s1.charAt(i);
}

让我们看一下这个:

迭代 1i = s1.length() - 1 = 3 ,代码变为:

s2 += s1.charAt(3);

这是什么意思?嗯,+=是一个复合连接运算符,所以让我们替换它:

s2 = s2 + s1.chartAt(3);

charAt(n)给出 String 的第 n 个字符,零索引 - 让我们也替换它:

s2 = s2 + "a"

所以,我们取s2这是“”并将其与“a”连接,我们将结果返回分配给s2 .

迭代 2i = 2 ,代码变为:

s2 += s1.charAt(2);

现在,我们知道 s1.charAt(2)是“v”并且 s2是“a”,所以:

s2 = "a" + "v" = "av"

迭代 3i = 1 ,代码变为:

s2 += s1.charAt(1);

现在,我们知道 s1.charAt(1)是“a”并且 s2是“av”所以:

s2 = "av" + "a" = "ava"   

迭代 4i = 0 ,代码变为:

s2 += s1.charAt(0);

现在,我们知道 s1.charAt(0)是“j”并且 s2是“ava”,所以:

s2 = "ava" + "j" = "avaj"  

循环自 i <= 0 起终止.

那么 s2+=s1.charAt(i) 行是什么意思?做?它需要 i s1 的第一个字符(零索引)并将其附加s2 .

应该注意的是,这段代码可以更有效地编写为:

String s1 = "java";
String s2 = new StringBuilder(s1).reverse().toString();

这有两个优点:

它更短且更具可读性。

String 上的串联运算符更快必须:

  1. 创建一个新的 char[]尺寸left.length + right.length
  2. 复制原文String的内容进入 char[]
  3. 将 rhs 内容复制到 char[]4 返回char[]包裹在 new String

非常昂贵 - 将单个字符添加到 String 整个原件String 必须复制过来。这是因为String 不可变

不要相信我 - 阅读 this excellent article 。那就永远不要使用 String +=再次循环。

关于java - 程序中s2+=s1.charAt(i)是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25763357/

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