字符串更改的长度和保存长度不变的int

时间:2014-05-05 20:08:39

标签: 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);
System.out.println(len2);

打印输出将是:

4
3
after swaping: 
4
3

len1len2的值不会改变。 len1应指向s1len2应指向s2。他们为什么不改变?

6 个答案:

答案 0 :(得分:5)

一旦您为int(或任何其他原始数据类型)分配了值,就会忘记"忘记"它来自哪里。一旦分配了值,它就会退出" s1"的长度,并且只是4.不多也不少。

如果您想继续引用s1的长度,只需在需要时随时调用s1.length(),而不是将其存储在另一个变量中。

答案 1 :(得分:1)

在进行更改之前,正在评估len1len2的值。因此,它的价值不会改变。

这些变量与s1s2无关,因此如果s1s2发生变化,它们就不会自动“更新”。

在第

int len1 = s1.length();

您可能认为len1s1有关,但错误。首先,评估s1.length(),假设它评估为4。然后,值4将分配给len1。总之,它们没有关联。

答案 2 :(得分:1)

如果是我,我根本不会使用len1len2变量(除非打印除了其他目的)。这将解决其他人在函数调用之前评估变量的问题。我会做这样的事情:

    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时,它都会显示它被初始化的值,因为你在交换后没有更新它们。我希望这能解除你的怀疑:)。