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()时会执行额外的复制,这是不必要的。相反,应该创建一个空字符串生成器,然后按相反的顺序填充。但是,此实现比原始实现要好得多。