Java 字符串的长度更改,保存长度的int不更改
我有一个问题:Java 字符串的长度更改,保存长度的int不更改,java,string,Java,String,我有一个问题: 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);
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
。为什么它们没有改变?一旦你给一个int
(或者任何其他原始数据类型)赋值,它就会“忘记”它来自哪里。一旦赋值,它就不再是“s1的长度”,而只是4。不多也不少
如果您想连续引用
s1
的长度,只要在需要时不断调用s1.length()
,而不是将其存储在另一个变量中。一旦您将值赋给int
(或任何其他基本数据类型),它就会“忘记”它来自何处。一旦赋值,它就不再是“s1的长度”,而只是4。不多也不少
如果要连续引用
s1
的长度,只要在需要时不断调用s1.length()
,而不是将其存储在另一个变量中即可。只有在执行
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);
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);
在进行更改之前,正在评估
len1
和len2
的值。因此,它的值不会改变
这些变量与s1
或s2
无关,因此如果s1
或s2
发生变化,它们不会自动“更新”
排队
int len1 = s1.length();
您可能认为
len1
与s1
相关,但它是错误的。首先,计算s1.length()
,假设它的计算结果为4
。然后将值4
分配给len1
。总之,它们不相关。在进行更改之前,正在评估len1
和len2
的值。因此,它的值不会改变
这些变量与s1
或s2
无关,因此如果s1
或s2
发生变化,它们不会自动“更新”
排队
int len1 = s1.length();
您可能认为
len1
与s1
相关,但它是错误的。首先,计算s1.length()
,假设它的计算结果为4
。然后将值4
分配给len1
。总之,它们没有关系。试试这个——你的逻辑是正确的,但你错过了作业
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);
}
}
试试这个-你的逻辑是正确的,但是你错过了作业
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);
}
}
这是因为您已经存储了字符串长度的值
String s1="9578";
String s2="434";
int len1=s1.length();
int len2=s2.length();
这是4和3,所以无论何时调用len1和len2,它都会显示初始化它所用的值,因为在交换后您不会更新它们。我希望这能消除您的疑虑:)这是因为您已经存储了字符串长度的值
String s1="9578";
String s2="434";
int len1=s1.length();
int len2=s2.length();
这是4和3,所以无论何时调用len1和len2,它都会显示初始化它所用的值,因为在交换后您不会更新它们。我希望这能澄清您的疑问:)如果是我,我根本不会使用
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,但这应该可以解决您的问题。如果是我,我根本不会使用
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,但这应该可以解决您的问题。因为您已经在这两个变量中存储了长度返回的值。这不是卓越!只是因为您交换了字符串,但没有交换整数或重新检查字符串的长度。我知道您可能认为它应该如何更新,但len1和len2只是存储值,而不是指向跟踪长度的某个内存位置的指针。因为您已将长度返回的值存储在这两个变量中。这不是卓越!只是因为您交换了字符串,但没有交换整数或重新检查字符串的长度。我知道您可能认为它应该如何更新,但len1和len2只是存储值,而不是指向跟踪长度的某个内存位置的指针。如果您不太懂Java,下面是第1课:语句后面加分号,不在方法调用的中间。除此之外,这一点很重要。@ajb呜呜声,对不起,我只是复制和粘贴了(这对我来说真是糟糕的编程),并没有捕捉到那些分号。解决了问题,谢谢你的帮助。@Pandey先生,我解决了。谢谢。如果你不知道太多java,这里是第1课:分号是在语句之后,而不是在方法调用中间。除此之外,这一点很重要。@ajb呜呜声,对不起,我只是复制和粘贴了(这对我来说真是糟糕的编程),并没有捕捉到那些分号。解决了问题,谢谢你的帮助。@Pandey先生,我解决了。谢谢你。