我在这里有一个问题:
String s1="9578";
String s2="434";
int len1=s1.length();
int len2=s2.length();
System.out.println(len1);
System.out.println(len2);
String temp;
temp=s1;
s1=s2;
s2=temp;
System.out.println("after swaping: ");
System.out.println(len1);
System.out.println(len2);
打印输出将是:
4
3
after swaping:
4
3
len1
和len2
的值不会改变。 len1
应指向s1
,len2
应指向s2
。他们为什么不改变?
答案 0 :(得分:5)
一旦您为int
(或任何其他原始数据类型)分配了值,就会忘记"忘记"它来自哪里。一旦分配了值,它就会退出" s1"的长度,并且只是4.不多也不少。
如果您想继续引用s1
的长度,只需在需要时随时调用s1.length()
,而不是将其存储在另一个变量中。
答案 1 :(得分:1)
在进行更改之前,正在评估len1
和len2
的值。因此,它的价值不会改变。
这些变量与s1
和s2
无关,因此如果s1
或s2
发生变化,它们就不会自动“更新”。
在第
行int len1 = s1.length();
您可能认为len1
与s1
有关,但错误。首先,评估s1.length()
,假设它评估为4
。然后,值4
将分配给len1
。总之,它们没有关联。
答案 2 :(得分:1)
如果是我,我根本不会使用len1
和len2
变量(除非打印除了其他目的)。这将解决其他人在函数调用之前评估变量的问题。我会做这样的事情:
String s1="9578";
String s2="434";
System.out.println(s1.length());
System.out.println(s2.length());
String temp;
temp=s1;
s1=s2;
s2=temp;
System.out.println("after swaping: ");
System.out.println(s1.length());
System.out.println(s2.length());
我不太了解Java,但这应该可以解决您的问题。
答案 3 :(得分:0)
len1变量仅在执行
时计算len1=s1.length();
语句。当你这样做
System.out.println(len1);
你没有重新计算字符串的长度,你只是重新打印旧的长度。这应该会产生预期的结果。
System.out.println("after swaping: ");
len1=s1.length();
len2=s2.length();
System.out.println(len1);
System.out.println(len2);
答案 4 :(得分:0)
试试这个 - 你的逻辑是正确的,但是你错过了作业。
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="9578";
String s2="434";
int len1=s1.length();
int len2=s2.length();
System.out.println(len1);
System.out.println(len2);
String temp;
temp=s1;
s1=s2;
s2=temp;
len1=s1.length();
len2=s2.length();
System.out.println("after swaping: ");
System.out.println(len1);
System.out.println(len2);
}
}
答案 5 :(得分:0)
因为你已经存储了字符串长度的值
String s1="9578";
String s2="434";
int len1=s1.length();
int len2=s2.length();
是4和3,所以每当你调用len1和len2时,它都会显示它被初始化的值,因为你在交换后没有更新它们。我希望这能解除你的怀疑:)。