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

String 对象是可变的-证明2

    博客分类:
  • java
 
阅读更多

public class StringTest {

	public static void main(String[] args)throws Exception {
		//String s = "1";
		//String s2 = "5";
		//String s2 = "2";
		//String s12 = "12";
		//String s22=s+s2;
		String s2 = "1";
		System.out.println("没改前的值=="+s2);
		System.out.println(s2=="1");
		c(s2);
		System.out.println("改了后的值=="+s2);
		System.out.println(s2=="1");
		
		//System.out.println(s12.equals(s22));
		//System.out.println(s.hashCode());
		//System.out.println(s2.hashCode());
		//System.out.println(s.equals(s2));
		//System.out.println(s2==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;
		//System.out.println(o);
		f.set(s, "5".toCharArray());
		Object o2 = f.get(s);
		//System.out.println(o2);
	}
}
 
分享到:
评论
4 楼 m635674608 2013-05-15  
zhdkn 写道
m635674608 写道
zhdkn 写道
佩服
System.out.println("改了后的值=="+s2);  // 输出:改了后的值==5
System.out.println(s2=="1");            // 输出:true
----------------------------------------------------------
然后我输出 System.out.println("1");     //输出了 5
还真把字符串 "1"的地址里面的值改成了 5

string是不是可以变的????


还是按照大众的理解吧,String是不可变的,再加上一句:但是如果采用特殊手段也能让它可变。

哈哈哈哈哈,,,,也是
3 楼 zhdkn 2013-05-15  
m635674608 写道
zhdkn 写道
佩服
System.out.println("改了后的值=="+s2);  // 输出:改了后的值==5
System.out.println(s2=="1");            // 输出:true
----------------------------------------------------------
然后我输出 System.out.println("1");     //输出了 5
还真把字符串 "1"的地址里面的值改成了 5

string是不是可以变的????


还是按照大众的理解吧,String是不可变的,再加上一句:但是如果采用特殊手段也能让它可变。
2 楼 m635674608 2013-05-15  
zhdkn 写道
佩服
System.out.println("改了后的值=="+s2);  // 输出:改了后的值==5
System.out.println(s2=="1");            // 输出:true
----------------------------------------------------------
然后我输出 System.out.println("1");     //输出了 5
还真把字符串 "1"的地址里面的值改成了 5

string是不是可以变的????
1 楼 zhdkn 2013-05-14  
佩服
System.out.println("改了后的值=="+s2);  // 输出:改了后的值==5
System.out.println(s2=="1");            // 输出:true
----------------------------------------------------------
然后我输出 System.out.println("1");     //输出了 5
还真把字符串 "1"的地址里面的值改成了 5

相关推荐

    Java string不可变原理实例解析

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

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

    String对象不可变,无法修改 ``` 这段代码是错误的,因为 `String` 对象的字符内容是不可变的,不能通过 `charAt` 或其他方法直接修改其内容。 ##### (3) 举例3 利用 `StringBuilder` 或 `StringBuffer` 修改字符...

    scjp历年真题(对准备报考SCJP认证考试的最后冲刺的必备资料)

    - B选项错误,因为String是不可变对象,不能通过索引操作符访问字符。 - C选项正确,toUpperCase()是String的方法,用于将字符串转换为大写。 - D选项错误,String对象不能进行减法运算。 5. 在// point x处的...

    Java笔试题(JAVA 笔试必看)

    在Java中,对String对象进行任何修改(如添加、删除或替换字符)都会生成一个新的String对象,这在处理大量字符串操作时可能会导致性能下降,因为频繁的对象创建会消耗更多的内存和时间。 StringBuffer和...

    python中数字是否为可变类型

    在Python中,不可变类型包括数字(Number)、字符串(String)和元组(Tuple)。这里我们关注数字类型: - **数字(Number)**:在Python中,数字是不可变的。这意味着,如果你创建了一个数字对象,然后尝试修改它...

    2022年IBMjava英文面试题.doc

    在Java中,String是不可变对象的示例。 13. 如何编写一个排序程序? 可以使用Java中的Arrays类或Collections类来编写一个排序程序。 14. 如何编写一个反排序程序? 可以使用Java中的Arrays类或Collections类来...

    Struts2 技术内幕读书笔记(1)

    这些属性可以是基本类型(如int、String等),也可以是其他类的对象。 - **方法**:方法定义了对象的行为。它们是实现对象特定功能的函数。 2. **对象的属性模式**:在面向对象编程中,对象通常采用JavaBean模式,...

    2021-2022计算机二级等级考试试题及答案No.13729.docx

    19. 元组与列表:元组是不可变序列,适合存储不可变数据,可用作字典的键;列表是可变序列,适合动态存储和操作数据。 20. 字型风格属性:在文字处理中,正常、斜体、粗体属于字型风格属性,颜色则不属于。 以上...

    最新java面试题(基础部分)

    该资源提供了Java面试题的答案,涵盖了Java基础知识点,包括内存溢出、String对象、垃圾回收、Error、Exception和RuntimeException的区别、hashCode的作用、HashMap和Hashtable的区别、Reader和InputStream的区别、...

    Java找工作经验心得-心得体会模板.doc

    - `String`表示不可变字符串,一旦创建后无法更改。 - `StringBuffer`表示可变字符串,可以通过各种方法修改字符串内容。 10. **Java的垃圾回收机制**: - 当对象不再被引用时,垃圾回收器会自动释放其占用的...

    Scala programming language.pdf

    - **线程安全性**:不可变对象天生具备线程安全特性,不需要额外的同步措施。 - **编译器优化**:对于不可变值,编译器更容易进行优化。 - **减少bug**:不可变数据结构减少了因状态变化导致的bug。 3. **从...

    Java 细数浅拷贝和深拷贝

    - 当对象中不包含可变的引用类型或者不需要对象间的完全隔离时,可以使用浅拷贝。 - 如果需要保证对象间的完全独立性,避免相互影响,则应该使用深拷贝。 #### 其他拷贝方式 除了通过实现`Cloneable`接口和利用...

    Kotlin基础全教程

    - `var`用于声明可变变量,`val`用于声明不可变变量。例如:`var age: Int = 0`、`val num = 20`。 - 类型推断:当类型可以从初始值推断出来时,可以省略类型声明,如`var num = 20`。 - 类型明确声明:如`var ...

    最新java面试题及答案

    答案是,可以,但是要key对象必须是不可变的对象,不然在Entry被插入Map中后,再改变key值,会导致当前key值与hash值不符,即与数组索引不符,将无法被查找到。 9. 启动一个线程是用run()还是start()? 答案是,用...

    commons-io-2.3.jar

    6. **对象序列化和反序列化**: `SerializationUtils`类提供了对象的序列化和反序列化功能,这对于持久化数据或在网络间传输对象非常有帮助。 7. **过滤器和迭代器**: Commons IO 提供了多种过滤器,如`...

    浅谈C#中的string驻留池

    在C#编程中,字符串是一种特殊的引用类型,它拥有一个内部不可变的特性。当程序代码中出现两个或多个相同的字符串字面量时,CLR(公共语言运行时)会确保它们在内存中仅存在一份实例。 首先,我们来了解一下什么是...

    SCJP310-055认证最新练习题库

    12. **Java SE 6新特性**:了解Java 6引入的新功能,如增强for循环、枚举类型、可变参数、动态代理等。 《ActualTests 310-055 v2007-07-09.pdf》这个文件名表明这是一份实际测试题库,包含了模拟试题和可能的解答...

    IBM Java英文面试题(附参考答案).doc

    不可变对象是创建后其状态不能改变的对象,例如Java中的String。 13. **如何编写排序程序?** 可以使用Java内置的`Arrays.sort()`或Collections的`sort()`方法对数组或集合进行排序,也可以自定义排序算法,如...

Global site tag (gtag.js) - Google Analytics