相关疑难解决方法(0)

不可变的意思是什么?

这可能是有史以来最愚蠢的问题,但我认为这对新手来说完全是一个混乱.

  1. 有人可以澄清不可变的含义吗?
  2. 为什么是String不可改变的?
  3. 不可变对象有哪些优点/缺点?
  4. 为什么一个可变对象StringBuilder比首字母和副词更受欢迎?

一个很好的例子(在Java中)将非常感激.

java string immutability

383
推荐指数
11
解决办法
17万
查看次数

左边填充一个带零的字符串

我在这里这里看过类似的问题.

但是我没有得到如何用Zero填充String.

输入:"129018"输出:"0000129018"

总输出长度应为TEN.

java string padding

240
推荐指数
11
解决办法
40万
查看次数

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万
查看次数

为什么字符串在Java和.NET中不可变?

为什么他们决定在Java和.NET(以及其他一些语言)中使字符串不可变?他们为什么不让它变得可变?

.net java string mutable

189
推荐指数
9
解决办法
4万
查看次数

"new String()"也是不可变的吗?

我一直在研究Java String.以下问题基于以下帖子

Java String是java中特殊
的String不可变性

  1. 不可变性:现在,通过不变性,String类被设计为公共池中的值可以在其他位置/变量中重用.如果String被创建为, 则这很好

    String a = "Hello World!"; 但是,如果我创建String之类的

    String b = new String("Hello World!"); 为什么这也是不变的?(或者是吗?).由于这有一个专用的堆内存,我应该能够修改它而不影响任何其他变量.因此,通过设计,还有其他任何原因,为什么String整体被认为是不可改变的?或者我的上述假设是错误的?

  2. 我想问的第二件事是关于常见的字符串池.如果我创建一个字符串对象为

    String c = ""; 是在池中创建的空条目?

这些帖子上已经有帖子吗?如果是这样,有人可以分享链接吗?

java string immutability

73
推荐指数
8
解决办法
8921
查看次数

java中的可变和不可变String之间有什么区别

据我所知,

可以更改可变字符串,并且不能更改不可变字符串.

在这里,我想像这样更改String的值,

String str="Good";
str=str+" Morning";
Run Code Online (Sandbox Code Playgroud)

和其他方式是,

StringBuffer str= new StringBuffer("Good");
str.append(" Morning");
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我试图改变其价值str.任何人都可以告诉我,这两种情况有什么不同,并给我清晰的可变和不可变对象的图片.

java string mutable stringbuffer immutability

48
推荐指数
4
解决办法
12万
查看次数

为什么修改了ArrayList参数,但没有修改String参数?

public class StackOverFlow {
    public static void main(String[] args) {
        ArrayList<String> al = new ArrayList<String>();
        al.add("A");
        al.add("B");
        markAsNull(al);
        System.out.println("ArrayList elements are "+al);

        String str = "Hello";
        markStringAsNull(str);
        System.out.println("str "+ str);
    }
    private static void markAsNull(ArrayList<String> str){
        str.add("C");
        str= null;
    }
    private static void markStringAsNull(String str){
        str = str + "Append me";
        str = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

这输出:

ArrayList elements are [A, B, C]
str Hello
Run Code Online (Sandbox Code Playgroud)

在这种情况下ArrayList,添加的元素将被检索.如果String方法调用对传递的String没有影响.JVM到底在做什么?谁能详细解释一下?

java parameters pass-by-reference call-by-value

25
推荐指数
3
解决办法
6578
查看次数

Java增强的循环 - 编辑原始数组值

我想详细了解Enhanced For Loop如何在Java中工作(假设我确实了解了这个循环的基本用法以及它是如何工作的).

给出以下代码:

String[] a = {"dog", "cat", "turtle"};

for (String s : a) {
  out.println("String: " + s);
  s = in.readLine("New String? ");
}
Run Code Online (Sandbox Code Playgroud)

它实际上并没有修改原始列表'a'.为什么不?内存管理如何工作?这不是'a [i]'的同一个存储单元的引用吗?

我在oracle文档中读到,增强for循环不能用于从原始数组中删除元素,这是有道理的.修改值是否相同?

提前致谢

java for-loop memory-management

5
推荐指数
2
解决办法
3243
查看次数

如何在java中处理字符串

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

这会"abc"在字符串池中创建文字.

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

没有创建新的文字.b指向现有的"abc".

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

现在,对象在堆中创建并c指向堆.文字也在字符串池中创建.

但是,如果池已经有文字,会发生什么"abc"?池中会有重复的文字吗?

java string

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

java字符串inmutable但代码没有显示

我正在学习字符串概念,所以写了一个代码,期望一个不同的输出,但有一些非常意外的事情.

class stringmute
{
    public static void main(String[] args)
    {
        String s1="Hello "; //string one.
        System.out.println("Str1:"+s1);
        String s2= s1+"world"; //New String.
        System.out.println("Str2="+s2);
        s1=s1+"World!!"; //This should produce only Hello right?
        System.out.println("Str1 modified:"+s1);

    }
}
Run Code Online (Sandbox Code Playgroud)

当我执行上面的代码时,我得到的输出为:

Str1:Hello 
Str2=Hello world
Str1 modified:Hello World!!
Run Code Online (Sandbox Code Playgroud)

如果我做错了什么,请告诉我.由于字符串是不可变的,这意味着我们应该将"Str1 Modified"的输出作为"HELLO"而不是"HELLO WORLD !!".

java string immutability

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