JAVA中字符串类型String是不允许改变其内容的,那么请问简要谈谈下列语句是如何运行的:

JAVA中字符串类型String是不允许改变其内容的,那么请问简要谈谈下列语句是如何运行的:String s=new String("ABCD");s=s+123+new Date()

这个应该怎么写啊~

确实,Java中的String类型确实是不允许改变其内容的,String类型的对象一旦建立,将在堆内存当中占据一个固定的内存空间,String类型的对象无法改变。
但是你在运算的时候又发现,你定义的String类型的s变量又是可以进行连接的,如"abc"+"def"最终得到的s的值是"abcdef",这似乎看着String类型的对象又是可以改变的,这是自相矛盾吗?
其实,String对象不允许改变内容是正确的,但是可以改变定义的String类型的变量指向,你定义的String s其实是一个指向String对象的指针,如果不存在对象就为null。
如果你定义了:
String s="abc";
那么将创建一个内容为"abc"的String对象,并且s指向这个对象。
一旦s=s+123+new Date()这样的操作,那么将创建一个新的String对象来存放新的内容,原先的对象依旧在内存中,但是s不在指向它,那么这个对象就会成为垃圾内存,在某一个特定的时刻有Java虚拟机回收。
如果希望存放的String可以调整大小,而不是创建新的内存来存放新的对象,可以使用StringBuffer这个类来存放。这个内存可以调整大小。而不会抛弃。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-13
1.新建对象String,内容为ABCD,开辟一块空间存进去,把内存地址返回给s
2.新建对象String,内容为s的内容加上字符串123的内容加上new Date()转为字符串后的内容,开辟一块空间存进去,把内存地址返回给s
以上内存均指jvm中的内存
第2个回答  2013-04-13
拼接字符串啊。123 链接字符串他也会变成字符串的,和new Date()链接起来时获得习题的当前时间。
第3个回答  2013-04-13
new StringBuilder().append(s).append(123).append(new Date().toString())

JAVA中字符串类型String是不允许改变其内容的,那么请问简要谈谈下列语 ...
其实,String对象不允许改变内容是正确的,但是可以改变定义的String类型的变量指向,你定义的String s其实是一个指向String对象的指针,如果不存在对象就为null。如果你定义了:String s="abc";那么将创建一个内容为"abc"的String对象,并且s指向这个对象。一旦s=s+123+new Date()这样的操作,那么将创...

为什么说String类型的值是不可改变的?
String对象是不可变的,它的内容是不能改变的。下列代码会改变字符串的内容吗?String s = "Java";s = "HTML";答案是不能。第一条语句创建了一个内容为"Java"的String对象,并将其引用赋值给s。第二条语句创建了一个内容为"HTML"的新String对象,并将其引用赋值给s。赋值后第一个String对象仍然...

java中String为什么不能更改 如下 虽然String的类型不能改变 但调用函...
函数的传递分为值传递和引用传递,如果函数的形参是值得话是实现不了交换的,因为他们形参和实参应用不同的地址空间,如果形参是对象的引用就可以实现因为他们引用共同的地址空间,如果值改变会影响到双方,在java中String也属于对应的引用的一种不过String是其中的特殊一个不能通过形参改变的引用,这是书上...

java string 为什么不可变?
Java中的String是不可变的,这意味着一旦创建了一个String对象,它的值就不能被改变。这是由于Java对String的设计和实现方式决定的,以下是几个原因:安全性:字符串不可变性使得字符串对象在多线程环境下是安全的,无需额外的同步措施。多个线程可以同时访问和共享字符串对象,而不必担心数据的修改。缓存...

在java中,说String是不可变的,可是为什么
1. 首先String不属于8种基本数据类型,String是一个对象。因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;3. String str=”kvill”;String str=new ...

java中的string类中内容一旦被初始化就不能改变为什么还有replace方 ...
replace虽然没有改变原字符串,但是replace返回了新的字符串。其过程:取原字符串值取出放入内存中,替换生成一个新的字符串,返回新字符串,从而得到了两个字符串。另:Java中的String类是声明为final的,一旦建立String对象之后它的值的内容是无法修改的,但是StringBuffer类弥补了String类的不足,String...

java中string是什么类型
Java中String是字符串类型。Java中的String是一个特殊的类,用于表示和操作文本数据。它是一个不可变的对象,一旦被创建,就不能更改其内容。因此,它继承了String类的许多有用的方法和操作。在Java中,String被认为是基本数据类型的一种封装形式,但它并不是基本类型,而是引用类型。以下是关于Java中...

为什么 java 中的 string 是不可变的
1、在Java中,String类是不可变类,一个不可变类是一个简单的类,并且这个的实例也不能被修改,这个类的实例创建的时候初始化所有的信息,并且这些信息不能够被修改 2、字符串常量池 字符串常量池是方法区中一块特殊的存储区域,当创建一个字符串常量的时候,判断该字符串字在符串字符串常量池中是否...

Java中String不可变的原因
从设计角度来看,String在Java中设计为不可变的主要原因有三。首先,安全性至关重要,由于String不可变,其值不能被修改,从而避免了因字符串修改导致的潜在安全问题。例如,用于密码的字符串如为可变,通过修改字符串便可尝试破解密码,而不可变的String能更有效地保护密码安全。其次,多线程环境下的安全性...

在java中,如图:有人能解释一下它的过程吗
首先要知道,String具有不变性,这一点性质类似于int、long等原始类型值。String的对象,一经创建,便无法改变。如String str = "123";那么,无论怎么操作,只要不用赋值语句给str赋新值,那么str中始终存的是"123"。除非你用str = "456";给他重新赋值。如果执行str + "456"str中依旧存的是"123...

相似回答