Java s2+的含义是什么=s1.程序中的字符(i)

Java s2+的含义是什么=s1.程序中的字符(i),java,Java,我有这个节目 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); 用粗体标记的代码中到底发生了什么 s2+=s1.charAt(i); // adding ith index char i

我有这个节目

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);
用粗体标记的代码中到底发生了什么

s2+=s1.charAt(i); // adding ith index char in s1 to current value of s2
例如:

您可以看到如何添加
s2

例如:


您可以看到
s2
如何添加
s2+=s1。字符(i)
表示取s2并将字符值添加到字符串s2的索引i处。

s2+=s1.charAt(i)表示取s2并在字符串s2的索引i处添加char值。

字符串s1以一种非常低效的方式反向附加到字符串s2引用。

字符串s1以一种非常低效的方式反向附加到字符串s2引用。

表示s2=s2+s1。charAt(i)。例如,在第一个循环中,它表示s2=“”+“a”sos2=“a”。

表示s2=s2+s1.charAt(i)。例如,在第一个循环中,它表示s2=“”+”a“sos2=“a”。

+=是加法赋值

a+=b;与a=a+b相同; 对于字符串,+表示串联

charAt(i)返回s1字符串中位置i处的字符。所以,

 s2+=s1.charAt(i);

将第i个字符从s1连接到当前s2字符串。

+=是加法赋值

a+=b;与a=a+b相同; 对于字符串,+表示串联

charAt(i)返回s1字符串中位置i处的字符。所以,

 s2+=s1.charAt(i);

将第i个字符从s1连接到当前s2字符串。

让我们浏览一下代码:

s1
分配给
字符串
“java”,并将
s2
分配给
字符串

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

让我们来看一下:

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

s2 += s1.charAt(3);
s2 += s1.charAt(2);
s2 += s1.charAt(1);
s2 += s1.charAt(0);
这是什么意思?好吧,
+=
是一个复合串联运算符,所以让我们替换它:

s2 = s2 + s1.chartAt(3);
charAt(n)
给出了
字符串的第n个字符,零索引-让我们也替换它:

s2 = s2 + "a"
因此,我们取
s2
,它是“”,并用“a”表示,我们将结果分配回
s2

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

s2 += s1.charAt(3);
s2 += s1.charAt(2);
s2 += s1.charAt(1);
s2 += s1.charAt(0);
现在,我们知道
s1.charAt(2)
是“v”,而
s2
是“a”,所以:

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

s2 += s1.charAt(3);
s2 += s1.charAt(2);
s2 += s1.charAt(1);
s2 += s1.charAt(0);
现在,我们知道
s1.charAt(1)
是“a”,而
s2
是“av”,所以:

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

s2 += s1.charAt(3);
s2 += s1.charAt(2);
s2 += s1.charAt(1);
s2 += s1.charAt(0);
现在,我们知道
s1.charAt(0)
是“j”,而
s2
是“ava”,所以:


循环终止,因为
i让我们遍历代码:

s1
分配给
字符串
“java”,并将
s2
分配给
字符串

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

让我们来看一下:

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

s2 += s1.charAt(3);
s2 += s1.charAt(2);
s2 += s1.charAt(1);
s2 += s1.charAt(0);
这是什么意思?好吧,
+=
是一个复合串联运算符,所以让我们替换它:

s2 = s2 + s1.chartAt(3);
charAt(n)
给出了
字符串的第n个字符,零索引-让我们也替换它:

s2 = s2 + "a"
因此,我们取
s2
,它是“”,并用“a”表示,我们将结果分配回
s2

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

s2 += s1.charAt(3);
s2 += s1.charAt(2);
s2 += s1.charAt(1);
s2 += s1.charAt(0);
现在,我们知道
s1.charAt(2)
是“v”,而
s2
是“a”,所以:

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

s2 += s1.charAt(3);
s2 += s1.charAt(2);
s2 += s1.charAt(1);
s2 += s1.charAt(0);
现在,我们知道
s1.charAt(1)
是“a”,而
s2
是“av”,所以:

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

s2 += s1.charAt(3);
s2 += s1.charAt(2);
s2 += s1.charAt(1);
s2 += s1.charAt(0);
现在,我们知道
s1.charAt(0)
是“j”,而
s2
是“ava”,所以:


并且循环终止,因为
i中标记的bold代码将从变量
s1
获得的每个字符按相反顺序追加到变量
s2

中标记的bold代码将从变量
s1
获得的每个字符追加到变量
s2
按相反的顺序。

你在上一次发言中已经写了逆转'。它是从给定字符串中的最后一个字符开始,然后返回您在上一个语句中所写的…'逆转'。它从给定字符串中的最后一个字符开始,然后返回字符串s2=new StringBuilder(s1)。reverse().toString();-请注意,此实现是次优的。@dzidzitop是吗?怎么做?@Boristeider感谢你一步一步的过程。这消除了我的困惑。此外,链接也很好。在构造StringBuilder()时会执行额外的复制,这是不必要的。相反,应该创建一个空字符串生成器,然后按相反的顺序填充。但是,此实现比原始实现要好得多。String s2=new StringBuilder(s1)。reverse().toString();-请注意,此实现是次优的。@dzidzitop是吗?怎么做?@Boristeider感谢你一步一步的过程。这消除了我的困惑。此外,链接也很好。在构造StringBuilder()时会执行额外的复制,这是不必要的。相反,应该创建一个空字符串生成器,然后按相反的顺序填充。但是,此实现比原始实现要好得多。