Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串的长度更改,保存长度的int不更改_Java_String - Fatal编程技术网

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先生,我解决了。谢谢你。