相关疑难解决方法(0)

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

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

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

为什么.NET String是不可变的?

众所周知,String是不可变的.String不可变的原因是什么,StringBuilder类的引入是可变的?

.net c# string immutability

182
推荐指数
8
解决办法
10万
查看次数

不可变字符串vs std :: string

我最近一直在阅读有关不可变字符串的原因为什么字符串在Java和.NET中不可变为什么.NET字符串是不可改变的?以及为什么D选择不可变字符串的一些东西.似乎有很多好处.

  • 平凡的线程安全
  • 更安全
  • 在大多数用例中,内存效率更高.
  • 便宜的子串(标记化和切片)

更不用说大多数新语言都有不可变的字符串,D2.0,Java,C#,Python等.

C++会从不可变字符串中受益吗?

是否有可能在c ++(或c ++ 0x)中实现具有所有这些优点的不可变字符串类?


更新:

在不可变字符串const_stringfix_str上有两次尝试.五年内都没有更新.它们甚至被使用过吗?为什么const_string没有进入boost?

c++ string immutability

61
推荐指数
3
解决办法
3万
查看次数

为什么字符串在许多编程语言中是不可变的?

可能重复:
为什么字符串在Java和.NET中不可变?
为什么.NET String是不可变的?

为此选择了几种语言,例如C#,Java和Python.如果它旨在为比较等操作节省内存或提高效率,它对连接和其他修改操作有什么影响?

c++ java string immutability

59
推荐指数
2
解决办法
1万
查看次数

StringBuilder类是如何实现的?每次追加时它是否在内部创建新的字符串对象?

StringBuilder类是如何实现的?每次追加时它是否在内部创建新的字符串对象?

.net c# string stringbuilder

50
推荐指数
4
解决办法
1万
查看次数

为什么Matz默认在Ruby中选择使Strings变为可变?

这与此问题相反:为什么字符串在Java和.NET中不可变?

这种选择是否仅仅因为操作(追加等)在可变字符串上有效,或者是否有其他原因而在Ruby中进行?

(如果它只是效率,那似乎很奇怪,因为Ruby的设计似乎不会高度重视促进有效的实施.)

ruby string language-design mutable immutability

43
推荐指数
2
解决办法
6224
查看次数

Java字符串如何变为不可变增加安全性?

我是Java的新手,在学习的时候,我发现了一个String不可变的事实.当我阅读其背后的原因时,出现了一些原因,例如性能提升,因为它的值无法修改,并且可以由多个线程共享.这些理由我明白了.
但我不知道它与安全性有什么关系.如何String在Java安全性中提供不可变的帮助?

请帮助我理解.提前致谢.

java security string

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

当两者都是引用类型时,字符串与类

这是我上一次采访的方式:

问题:字符串存储在哪里?

答:堆是因为它是参考类型

问题:请解释以下代码:

static void Main(string[] args)
{
     string one = "test";
     string two = one;
     one = one + " string";

     Console.WriteLine("One is {0}" , one);
     Console.WriteLine("Two is {0}", two);
}
Run Code Online (Sandbox Code Playgroud)

答案:画了两张如下图:

(代表声明, string two = one;

在此输入图像描述

(代表语句, one = one + " string";.在堆上创建一个新字符串并分配)

在此输入图像描述

问题:正确.为下面的代码片段绘制类似的内容:

class Program
{
    static void Main(string[] args)
    {
        Test one = new Test { someString = "test" };
        Test two = one;
        one.someString = "test String";

        Console.WriteLine("One …
Run Code Online (Sandbox Code Playgroud)

.net c# string class immutability

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

传值(StringBuilder vs String)

我不明白为什么System.out.println(name)输出Sam而不受方法的concat函数的影响,而System.out.println(names)输出Sam4作为方法的append方法的结果.为什么StringBuilder受影响而不是String?通常,在对对象的引用上调用方法会影响调用者,所以我不明白为什么String结果保持不变.提前致谢

public static String speak(String name) {
    name = name.concat("4");
    return name;
}

public static StringBuilder test(StringBuilder names) {
    names = names.append("4");
    return names; 
}

public static void main(String[] args) {
    String name = "Sam";
    speak(name);
    System.out.println(name); //Sam
    StringBuilder names = new StringBuilder("Sam");
    test(names);
    System.out.println(names); //Sam4
}
Run Code Online (Sandbox Code Playgroud)

java string stringbuilder parameter-passing pass-by-value

12
推荐指数
2
解决办法
4490
查看次数

字符串数组是否可变?

我想知道Java中的String数组是否可变?我知道字符串是不可变的,但字符串数组怎么样?

如果我有一个字符串数组,并更改内容,是否会创建一个新的字符串对象?或者实际值是否会改变?

提前致谢

java arrays string types mutable

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