`

可变性与不可变性

阅读更多
String StringBuilder StringBuffer 的区别

代码应用

public static void main(String[] args) {
String s = " Hello ";
s += " World ";
s.trim( );
System.out.println(s);
}


正确输出结果:

 Hello  World 


问题:
1.经过Trim()之后应去掉两边多余的空格(包括制表符),为什么此处输出没有变化

说明:
1.字符串对象(String Object)是非可变的(immutable),这个题目容易迷惑人的地方在s.trim( )这一行。

2.理解对象引用和不可达对象会由垃圾回收器收集。




解决:
如果需要输出前后没有空格的”Hello World”,那么应该将s.trim( )再赋值给”s”。这个赋值操作可以让s指向新创建出来的字符串对象。

		StringBuilder sb = new StringBuilder(" Hello ");
		sb.append(" World ");
		System.out.println(sb.toString().trim());
		
		StringBuffer sf = new StringBuffer(" Hello ");
		sf.append(" World ");
		System.out.println(sf.toString().trim());

		System.exit(0);


StringBuilder不是一个线程安全的类,因此仅仅用作本地变量是没有问题的。如果你希望用作实例变量,那么可以选择线程安全的StringBuffer类。

运行StringBuilder 会出现ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 JD
添加System.exit(0); 可避免

博文转载:
http://www.importnew.com/2217.html
  • 大小: 88.6 KB
分享到:
评论

相关推荐

    String型的不可变性

    什么是不可变性呢?简单来说,就是 String 对象一旦被创建,不能被修改。那么,为什么 String 对象不能被修改呢?这就需要从 Java 的内存分配机制说起。 Java 把内存划分为两种:一种是栈(stack)内存,一种是堆...

    基于时间反演不变与可变统一的混沌模型

    在引言部分,作者讨论了在广义相对论下,时间反演的可变性与不可变性原则上的过度可能性,以及在微观和宏观层次下观测到的不同时间反演行为。例如,在微观尺度下时间反演可变与不可变是共存的现象,而在宏观长时间...

    Java学习路径(二)书籍篇

    总的来说,本篇文章提供的Java学习路径强调了编写可维护代码的重要性,包括使用final关键字、理解可变性与不可变性、采用函数样式编程、控制变化以及运用单元测试和重构。这些知识对于任何Java程序员来说都是宝贵的...

    用Python解决算法问题(John B. Schneider)Algorithmic Problem Solving with Python (John B. Schneider)

    列表和for循环章节中,详尽地介绍了列表的概念、方法、for循环的使用,以及索引、range()函数的用法,还涉及了可变性与不可变性的概念。 从这些内容可以看出,这本书是一个很好的入门教材,它不仅为读者提供了编程...

    lambda Functional_Programming.zip

    可变性与不可变性 在函数式编程中,数据通常是不可变的,这意味着一旦创建,对象的值就不能更改。这种设计减少了副作用,提高了代码的可预测性和测试性。例如,在使用Scala或Haskell等纯函数式语言时,所有的数据...

    python入门

    - **可变性与不可变性**:对象分为可变对象和不可变对象。不可变对象(如整数、字符串)一旦创建就不能更改其状态;而可变对象(如列表、字典)可以在创建后修改其内容。 - **别名**:Python中的对象可以通过多个...

    js删除数组中指定元素

    4. **数组的可变性与不可变性** JavaScript中的数组是可变的,这意味着可以直接修改原数组。然而,在某些情况下(如函数返回结果、React的状态更新等),我们可能需要保持数据的不可变性,这时`filter()`方法就显得...

    Ruby-SycamoreRuby的无序树的数据结构

    1. **可变性与不可变性**:Sycamore 支持创建可变和不可变的树。不可变树是线程安全的,可以在多线程环境中使用,而不用担心数据竞争问题。 2. **高效操作**:由于其内部实现,Sycamore树的操作通常具有很好的性能,...

    Java常用类与基础API-String的理解与不可变性

    ### Java常用类与基础API-String的理解与不可变性 #### 一、字符串相关类之不可变字符序列:String ##### (1) 对String类的理解(以JDK8为例说明) **1. 环境** 本文档使用JDK 8进行演示。JDK 8的环境设置确保了...

    浅谈Python中的可变与不可变数据类型.zip

    不可变对象由于其不可变性,更易于进行引用计数,而可变对象可能涉及更复杂的引用关系,如循环引用,需要更复杂的垃圾回收策略。 总的来说,了解Python中的可变与不可变数据类型及其特性,可以帮助我们更好地控制...

    基于Python对象引用、可变性和垃圾回收详解

    总结来说,Python的对象引用允许变量共享同一块内存,可变性和不可变性决定了对象的内容是否可改变,垃圾回收机制则负责高效地管理内存。了解这些概念对于编写高效、无内存泄漏的Python代码至关重要。在实际编程中,...

    02-python-列表-可变和不可变类型-元组-列表与元组的速度比较

    由于列表的可变性,它在处理动态数据和需要频繁修改的情况时特别有用。 接着,元组(Tuple)是Python中的不可变数据类型。元组用圆括号`()`表示,元素之间同样用逗号分隔。例如,`(1, 2, 3)`就是一个包含整数的元组...

    JAVA不可变类(immutable)机制与String的不可变性(推荐)

    String类是Java中不可变性的一个经典例子。它的`value`数组存储字符,一旦创建,就无法更改。String类的所有方法,如`substring`、`concat`等,都会返回新的String对象,而不是修改原对象。例如,`String(char value...

    JavaScript数据结构的不可变操作

    不可变性意味着一旦创建了数据结构,就不能更改其内容。这种特性可以带来很多好处,例如更容易的并发处理、更好的性能优化以及更简单的调试。在JavaScript中,虽然原始类型(如字符串、数字和布尔值)本身就是不可变...

    Java并发编程规则:不可变对象永远是线程安全的.docx

    理解不可变性是非常重要的,无论是Java语言规范还是Java存储模型都没有对不可变性做出正式的定义。因此,需要开发者自己来确保对象的不可变性。例如,在定义不可变类时,需要将所有域都声明为final类型,并且确保...

    Python-immut一个不可变的python容器库

    不可变性保证了数据的安全性,因为它们不会因为意外的修改而产生副作用,特别适用于多线程或并发环境。 2. **Python中的可变与不可变容器**: Python的列表、字典等是可变容器,允许添加、删除或更改元素。而元组...

    Node.js-immutable-Javascript不可变的持久化数据集合

    **不可变性与持久化数据** 不可变性意味着一旦创建一个对象,其状态就不能改变。在`immutable.js`中,对数据的任何操作都会返回一个新的对象,而不是直接修改原有对象。这种特性确保了代码的预测性,减少了因意外...

    Java编程学习之java的不可变数据结构.doc

    Java编程学习之java的不可变数据结构 在Java编程中,数据结构的不可变性是一个非常重要的概念。许多开发人员认为,只要使用final...但是,我们需要正确地理解不可变对象的概念,并正确地设计类以确保对象的不可变性。

    Java String不可变性实现原理解析

    Java String 不可变性实现原理解析 Java String 不可变性是 ...Java String 不可变性是通过使用 final 修饰符和 private 修饰符来实现的,它确保了 String 对象的不可变性,提高了多线程环境中的数据一致性和正确性。

Global site tag (gtag.js) - Google Analytics