因为 String 是不可变的,所以如果您不将函数的返回值分配给 string.so 在您的问题中将 display(s1) 的值分配给 s,则不会发生更改。
s=display(s1);那么字符串s的值就会改变。
当我编写程序以获取一些排列字符串时,我也得到了未更改的值(虽然它没有给出所有排列,但这是例如回答你的问题)
这是一个例子。
import java.io.*;
public class MyString {
public static void main(String []args)throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s=br.readLine().trim();
int n=0;int k=0;
while(n!=s.length()){
while(k<n){
swap(s,k,n);
System.out.println(s);
swap(s,k,n);
k++;
}
n++;
}
}
public static void swap(String s,int n1,int n2){
char temp;
temp=s.charAt(n1);
StringBuilder sb=new StringBuilder(s);
sb.setCharAt(n1,s.charAt(n2));
sb.setCharAt(n2,temp);
s=sb.toString();
}
}
但我没有从上面的代码中得到字符串的置换值。所以我将交换函数的返回值分配给字符串并得到了字符串的更改值。分配返回值后,我得到了字符串的置换值。
//import java.util.*;
import java.io.*;
public class MyString {
public static void main(String []args)throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s=br.readLine().trim();
int n=0;int k=0;
while(n!=s.length()){
while(k<n){
s=swap(s,k,n);
System.out.println(s);
s=swap(s,k,n);
k++;
}
n++;
}
}
public static String swap(String s,int n1,int n2){
char temp;
temp=s.charAt(n1);
StringBuilder sb=new StringBuilder(s);
sb.setCharAt(n1,s.charAt(n2));
sb.setCharAt(n2,temp);
s=sb.toString();
return s;
}
}