String的不可变性

//字符串不可变性:字符串内容一旦确定,对应的内存区域就确定。
	//如果改变字符串内容,那么就会指向新的内存区域。
	String str1="aaa";//str1分配在栈中
	String str2="aaa";//str2分配在栈中
	System.out.println(str1.equals(str2));//比较内容
	System.out.println(str1==str2);//比较引用(内存地址)
	System.out.println("========");
	String str3=new String("aaa");
	String str4=new String("aaa");
	System.out.println(str1.equals(str3));//比较内容
	System.out.println(str1==str3);//比较引用(内存地址)
	System.out.println(str3==str4);//比较引用(内存地址)

  

true
true
========
true
false
false

时间: 2024-10-11 15:12:56

String的不可变性的相关文章

java中String的不可变性

昨天面试的时候,面试官问我String的不可变性,我回答的有点糟糕,赶紧查资料总结一下以备忘! 一.原理 1.不变模式(不可变对象) 在并行软件开发过程中,同步操作似乎是必不可少的.当多线程对同一个对象进行读写操作时,为了保证对象数据的一致性和正确性,有必要对对象进行同步.而同步操作对系统性能是相当的损耗.为了能尽可能的去除这些同步操作,提高并行程序性能,可以使用一种不可改变的对象,依靠对象的不变性,可以确保其在没有同步操作的多线程环境中依然始终保持内部状态的一致性和正确性.这就是不变模式. 不

【Java基础】JAVA不可变类(immutable)机制与String的不可变性

一.不可变类简介 不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值.如JDK内部自带的很多不可变类:Interger.Long和String等. 可变类:相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类. 下面的理解可能会易懂一些: {概念:不可变类的意思是创建该类的实例后,该实例的属性是不可改变的.Java中的8个包装类和String类都是不可变类.所以不可变类并不是指该类是被final修饰的,而是指该类的属性是被final修

Thinking in java学习笔记之String的不可变性

为了提高效率,可以使用StringBuffer或StringBuilder 1. 在执行速度方面的比较:StringBuilder > StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了.3. StringBuilder:线程非安全的 StringBuffer:线程安全的 当我们在字符串缓冲去被多个线程使用是,J

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

不可变类:是指这个类实例一旦创建,就不能不该其成员变量的值 优点: 1.线程安全 对象的值无法改变,降低并发错误的可能性 2.效率高 当一个对象需要复制时,就只需要复制对象地址,不用复制本生 不变性,保证了hashcode的唯一性,每次缓存时不必重新计算hashcode,所以常用string作为key 3.便于测试 而且如果程序里的变量都是immutable 的话 side effect就比较小 程序只要写好测一遍基本没有什么bug 缺点: 每一次改变都需要产生新的对象,容易产生很多垃圾 设计方

图解String类型的不可变性及其原因

1.String的不可变性 String s="abcd": 上面的语句定义了一个字符串变量s.该变量指向字符串"abcd",当初始化变量s时,会在堆中为s非配内容空间.例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXVuemVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 当将

一、图解Java中String不可变性

这里有一堆例子来说明Java的String的不可变性. 1.声明一个String String s = "abcd"; s 变量保存string对象的引用,下面的箭头解释成保存了哪个对象的引用. 2. 给一个String 变量赋值为另外一个String 变量. String s2 = s; String对象不可变展示2变量s2 保存这相同引用的值,它们都指向了同一对象的值. 3.连接String s = s.concat("ef"); 变量s 现在保存的是新创建的s

Java基础:String不可变性和final修饰

转载请注明出处: jiq?钦's technical Blog - 季义钦 String的不可变性 Java规定String是不可变的(immutable).事实上这个不可变具备两层含义: 1 内容不可变 不论什么看起来改动它们的操作.实际上都是又一次new出一个对象. String s = new String("111"); String newS = s; newS = "dsfsd"; System.out.println(s); //111 假设不能做到内

Java中的String为什么是不可变的?

转载:http://blog.csdn.net/zhangjg_blog/article/details/18319521 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 区分对象和对象的引用 对于J

再解Java中的String

今天朋友问我String的内容是真的不可变吗?我肯定告诉他是的?因为在我的主观意识里String就是一个不可变的对象.于是他给我发了这段程序: public class StringTest { public static void main(String[] args) throws Exception { String a = "chenssy"; System.out.println("a = " + a); Field a_ = String.class.g