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

时间:2014-09-10 10:43:00

标签: 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);

以粗体标记的代码中究竟发生了什么。

7 个答案:

答案 0 :(得分:5)

让我们来看看代码:

s1分配给String“java”并将s2分配给String“”。

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

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

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

让我们来看看:

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

s2 += s1.charAt(3);

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

s2 = s2 + s1.chartAt(3);

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

s2 = s2 + "a"

因此,我们将s2取为“”,并将其与“a”相连,我们将结果返回分配给s2

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

s2 += s1.charAt(2);

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

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

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

s2 += s1.charAt(1);

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

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

迭代4 i = 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[]
  2. 的新left.length + right.length
  3. 将原始String的内容复制到char[]
  4. 将rhs内容复制到char[] 4返回包含在char[]
  5. 中的new String

    非常昂贵 - 要向String添加单个字符,必须复制整个原始String 。这是因为String 不可变

    不要相信我 - 请阅读this excellent article。然后再也不要在循环中使用String +=

答案 1 :(得分:0)

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

例如:

 String s1="123456";
 String s2="";
   for(int i=0;i<s1.length();i++){
       s2+=s1.charAt(i);
       System.out.println(s2);
  }

运行此

1
12
123
1234
12345
123456

您可以看到s2添加

的方式

答案 2 :(得分:0)

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

答案 3 :(得分:0)

字符串s1反向附加到字符串s2指的是非常低效的方式。

答案 4 :(得分:0)

表示s2 = s2 + s1.charAt(i)。例如,在第一个循环中,它表示s2 =&#34;&#34; +&#34; a&#34;所以s2 =&#34; a&#34;。

答案 5 :(得分:0)

+ =是加法作业。

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

s1.charAt(i)返回s1字符串中位置i的char。因此,

 s2+=s1.charAt(i);

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

答案 6 :(得分:0)

粗体标记的代码会以相反的顺序将变量s1中获得的每个字符附加到变量s2