`
m635674608
  • 浏览: 5053699 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

String 对象是可变的!

    博客分类:
  • java
 
阅读更多

在面试的时候可能经常会被问到,String是否是可变的,我觉得String是可变的!你们觉得了?

public class T {

	/**
	 * @param args
	 */
	public static void main(String[] args)throws Exception {
		// TODO Auto-generated method stub
		String s = "1";
		System.out.println(s);
		c(s);
		System.out.println(s);
		
	}
	
	public static void c(String s)throws Exception{
		Field f = s.getClass().getDeclaredField("value");
		f.setAccessible(true);
		Object o = f.get(s);
		char[] c = (char[]) o;
		f.set(s, "5".toCharArray());
		//System.out.println(s);
	}
}

   结果是

  1

  5 

0
8
分享到:
评论
17 楼 m635674608 2013-01-14  
muyishuihan 写道
你都用反射了,还有什么不能做的

16 楼 muyishuihan 2013-01-14  
你都用反射了,还有什么不能做的
15 楼 rainsilence 2013-01-12  
kanme818 写道
我会回答可变,真的可不可变先不讨论,我知道在面试官心里,答案就是可变

别把面试官想的那么高端。人家也许也只知其一不知其二呢。所以要回答既不可变,又可变
14 楼 rainsilence 2013-01-12  
m635674608 写道
rainsilence 写道
setAccessible(true)
取消一切类型检查,连private,final都没问题。

如果面试官问你这样的问题,你怎么回答

简单,原理在于不变模式。因为不变模式,所以用正常的方法是无法改变值的。但是可以用反射改变
13 楼 m635674608 2013-01-12  
qianhd 写道
恩, 要是用C 都能把你从这世界上抹掉

看来我得改行了。。
12 楼 qianhd 2013-01-12  
恩, 要是用C 都能把你从这世界上抹掉
11 楼 m635674608 2013-01-12  
if(i!=我){} 写道
m635674608 写道
if(i!=我){} 写道
你如果直接改内存数据的话,一切都是可变的!哗众取宠!!!!

如果面试官问你这样的问题,你怎么回答

我会说在不破坏java特性下是不可变的,然后略微说一下String变量的储存特性。如果这个解释令他很鄙夷你的话,你也用不着到这个公司上班!

10 楼 if(i!=我){} 2013-01-12  
m635674608 写道
if(i!=我){} 写道
你如果直接改内存数据的话,一切都是可变的!哗众取宠!!!!

如果面试官问你这样的问题,你怎么回答

我会说在不破坏java特性下是不可变的,然后略微说一下String变量的储存特性。如果这个解释令他很鄙夷你的话,你也用不着到这个公司上班!
9 楼 m635674608 2013-01-12  
kanme818 写道
kanme818 写道
我会回答可变,真的可不可变先不讨论,我知道在面试官心里,答案就是可变

sorry,是不可变~~~打错字了

不错。。正解
8 楼 kanme818 2013-01-12  
kanme818 写道
我会回答可变,真的可不可变先不讨论,我知道在面试官心里,答案就是可变

sorry,是不可变~~~打错字了
7 楼 kanme818 2013-01-12  
我会回答可变,真的可不可变先不讨论,我知道在面试官心里,答案就是可变
6 楼 m635674608 2013-01-12  
rainsilence 写道
用了反射,一切设计模式都是浮云!

如果面试官问你这样的问题,你怎么回答
5 楼 m635674608 2013-01-12  
rainsilence 写道
setAccessible(true)
取消一切类型检查,连private,final都没问题。

如果面试官问你这样的问题,你怎么回答
4 楼 m635674608 2013-01-12  
if(i!=我){} 写道
你如果直接改内存数据的话,一切都是可变的!哗众取宠!!!!

如果面试官问你这样的问题,你怎么回答
3 楼 if(i!=我){} 2013-01-12  
你如果直接改内存数据的话,一切都是可变的!哗众取宠!!!!
2 楼 rainsilence 2013-01-12  
setAccessible(true)
取消一切类型检查,连private,final都没问题。
1 楼 rainsilence 2013-01-12  
用了反射,一切设计模式都是浮云!

相关推荐

    Java中的String对象是不可变的吗Java开发Jav

    在Java编程语言中,String对象被认为是不可变的。这个特性是Java设计者为了优化性能、安全性和线程安全性而有意设定的。理解String对象的不可变性对于Java开发者来说至关重要,因为它影响着代码的编写、内存管理和多...

    Java 中的 String对象为什么是不可变的

    在Java编程语言中,String对象被认为是不可变的,这意味着一旦创建了一个String实例,就不能更改它的内容。这种特性是由String类的设计决定的,它对程序员在处理字符串时提供了许多优势和安全保证。 首先,理解什么...

    String对象创建问题

    `String`类在Java中被广泛使用,因为它代表不可变的字符序列,这使得它在很多场景下非常安全。这里我们将深入探讨`String`对象在编译期和执行期的创建方式以及它们之间的差异。 首先,我们来了解一下编译期的`...

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

    在Java编程语言中,String类是一个非常特殊且重要的类,它是不可变的。这个特性意味着一旦创建了一个String对象,它的值就不能被改变。这个设计决策背后有多种原因,包括性能、安全性和线程安全性。 首先,理解...

    String型的不可变性

    这是因为 String 对象是一种不可变的对象。一旦 String 对象被创建,它的值就不能被修改。例如,我们可以创建一个 String 对象 String str = "abc";,然后尝试修改它的值 str = "def";,但是,这样做并不会修改原来...

    String创建对象

    6. **String是不可变的**: `String`类的对象一旦创建,其内容就不能更改。每次对`String`对象进行修改操作(如`concat()`、`substring()`等),都会生成新的`String`对象。 7. **垃圾回收与String对象**: 如果...

    java中Object对象String对象的解析.pdf

    String 对象有一个非常重要的特点,即它是不可变的(immutable)。这意味着一旦创建了 String 对象,它的值就不能被改变。 在 Java 中,可以使用两种方式创建 String 对象:一种是使用字面值赋值方式,例如 `String...

    Java string不可变原理实例解析

    Java中的String类是不可变的,这意味着一旦创建了一个String对象,就不能改变它的内容。这个特性是由几个关键的设计决策和语言特性共同决定的。首先,String类被声明为final,这防止了其他类对其进行子类化并改变其...

    Java String对象的经典问题

    ### Java String对象的经典问题 #### 一、String 类与对象机制概述 在Java中,`String`类是一个非常重要的类,它提供了丰富的功能用于处理文本数据。`String`类是不可变的(immutable),这意味着一旦一个`String`...

    String类创建对象问题

    尽管如此,`String` 类拥有其独特之处,比如它是不可变的(final),这保证了字符串一旦创建便不能更改其内容。 **常量池(Constant Pool)**:在 Java 编译阶段确定的数据集合,存储在 `.class` 文件中。它包含了类...

    浅谈为什么Java里面String类是不可变的

    那么,为什么 Java 语言的设计者要把 String 类型设计成不可变对象呢?下面,我们将深入探讨字符串不可变性的原因和优点。 不可变对象的定义 不可变对象指的是对象创建之后,对象的内部状态以及对象的内存指针地址...

    创建string对象过程的内存分配:

    在Java中,`String` 类是最常用的数据类型之一,用于表示不可变的字符序列。`String` 对象的创建涉及复杂的内存分配机制,特别是在Java虚拟机 (JVM) 的环境中。本文将详细介绍创建 `String` 对象过程中涉及的不同...

    Java中的String为什么是不可变的共7页.pdf.z

    3. **线程安全**:由于`String`对象不可变,它们在多线程环境下可以安全地共享,无需额外的同步措施。这是Java设计者为了提高安全性及并发性能所做的决策。 4. **字符串池**:Java使用字符串池来存储常量字符串,以...

    浅谈java String不可变的好处

    因为在程序编写的过程中,会大量地用到String常量,如果每次声明一个String引用都要新建一个String对象,那么会造成空间的极大浪费。于是,在java的堆中开辟了一块存储空间String pool,用于存储String常量对象。当...

    JavaScript String 对象参考手册

    字符串在JavaScript中是一种不可变的数据类型,这意味着一旦创建,就不能更改其内容。尽管如此,String对象提供了丰富的内置方法来处理字符串的各种需求,包括查找、替换、连接、格式化以及提取子字符串等。 首先,...

    为什么Java字符串是不可变对象?

    本文主要来介绍一下Java中的不可变对象,以及Java中String类的不可变性,那么为什么Java的String类是不可变对象?让我们一起来分析一下。  答案一:  流行的Java面试题之一是:什么是不可变对象(immutable ...

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

    什么是不可变对象?  众所周知, 在Java中, String类是不可变的。...  对于Java初学者, 对于String是不可变对象总是存有疑惑。看下面代码:  String s = ABCabc;  System.out.println(s = + s);  s = 1

    动力节点_Java基础视频教程93_String对象是不可变

    动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础语法、Java的面向对象。每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础...

    String ,StringBuffer与StringBuilder

    并且由于 String 对象是不可变对象,每次操作 String 都会重新建立新的对象来保存新的值。这样原来的对象就没用了,就要被垃圾回收。这也是影响性能的。 下面是一个实验,我们通过循环来连接 26 个英文字母重复加了...

Global site tag (gtag.js) - Google Analytics