相关疑难解决方法(0)

Java是"通过引用传递"还是"传递价值"?

我一直认为Java是传递引用的.

但是,我看过一些博客文章(例如,这个博客)声称它不是.

我不认为我理解他们所做的区别.

解释是什么?

java methods parameter-passing pass-by-reference pass-by-value

6270
推荐指数
80
解决办法
189万
查看次数

Java字符串真的是不可变的吗?

我们都知道StringJava 中是不可变的,但请检查以下代码:

String s1 = "Hello World";  
String s2 = "Hello World";  
String s3 = s1.substring(6);  
System.out.println(s1); // Hello World  
System.out.println(s2); // Hello World  
System.out.println(s3); // World  

Field field = String.class.getDeclaredField("value");  
field.setAccessible(true);  
char[] value = (char[])field.get(s1);  
value[6] = 'J';  
value[7] = 'a';  
value[8] = 'v';  
value[9] = 'a';  
value[10] = '!';  

System.out.println(s1); // Hello Java!  
System.out.println(s2); // Hello Java!  
System.out.println(s3); // World  
Run Code Online (Sandbox Code Playgroud)

为什么这个程序运行这样?为什么价值s1s2变化,但不是s3

java string reflection immutability

391
推荐指数
11
解决办法
5万
查看次数

Java中字符串的不变性

请考虑以下示例.

String str = new String();

str  = "Hello";
System.out.println(str);  //Prints Hello

str = "Help!";
System.out.println(str);  //Prints Help!
Run Code Online (Sandbox Code Playgroud)

现在,在Java中,String对象是不可变的.那么为什么对象str可以赋值"帮助!".这与Java中字符串的不变性相矛盾吗?任何人都可以向我解释一下不变性的确切概念吗?

编辑:

好.我现在得到它,但只是一个后续问题.以下代码如何:

String str = "Mississippi"; 
System.out.println(str); // prints Mississippi 

str = str.replace("i", "!"); 
System.out.println(str); // prints M!ss!ss!pp! 
Run Code Online (Sandbox Code Playgroud)

这是否意味着再次创建了两个对象("Mississippi"和"M!ss!ss!pp!"),并且引用str指向replace()方法之后的另一个对象?

java string immutability

211
推荐指数
7
解决办法
9万
查看次数

字符串是不可变的.究竟是什么意思?

我在不可变字符串上编写了以下代码.

public class ImmutableStrings {

    public static void main(String[] args) {
        testmethod();
    }

    private static void testmethod() {
        String a = "a";
        System.out.println("a 1-->" + a);
        a = "ty";
        System.out.println("a 2-->" + a);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

a 1-->a  
a 2-->ty
Run Code Online (Sandbox Code Playgroud)

这里变量的值a已经改变(许多人说不可变对象的内容不能改变).但究竟是什么意思说String是不可改变的?你能否为我澄清一下这个话题?

来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

java string immutability

194
推荐指数
4
解决办法
26万
查看次数

如果创建了新实例,字符串是否会失去可变性

我知道字符串在本质上是不可改变的.但我有一个问题.

String a = new String("abc");
Run Code Online (Sandbox Code Playgroud)

如果我们创建一个像上面的字符串而不是文字,那么它不是不可变的,因为它是作为一个新对象创建的吗?请澄清.谢谢.

java string jvm

1
推荐指数
1
解决办法
100
查看次数

在Java中删除字符串

我知道字符串(至少在Java中)是不可变的.我不是要清空字符串的内容.

如果我这样做,我会用这个: output.setText( outputString );

我的问题是:如果你想通过放弃存储字符串的位来最小化程序所需的空间量,有没有办法做到这一点?

java string

0
推荐指数
1
解决办法
115
查看次数