`
slip_123
  • 浏览: 84687 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

java String对象创建与引用问题

    博客分类:
  • java
阅读更多
String str1 = "abc";
String str2 = "abc";
str1 = "bcd";
System.out.println(str1 + "," + str2); //bcd, abc
System.out.println(str1==str2); //false
赋值的变化导致了类对象引用的变化,str1指向了另外一个新对象!而str2仍旧指向原来的对象。上例中,当我们将str1的值改为"bcd"时,JVM发现在栈中没有存放该值的地址,便开辟了这个地址,并创建了一个新的对象,其字符串的值指向这个地址。

String str1 = "abc";
String str2 = "abc";
str1 = "bcd";
String str3 = str1;
System.out.println(str3); //bcd
String str4 = "bcd";
System.out.println(str1 == str4); //true
str3这个对象的引用直接指向str1所指向的对象(注意,str3并没有创建新对象)。当str1改完其值后,再创建一个String的引用str4,并指向因str1修改值而创建的新的对象。可以发现,这回str4也没有创建新的对象,从而再次实现栈中数据的共享。


String str1 = new String("abc");
String str2 = "abc";
System.out.println(str1==str2); //false 创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。
String str1 = "abc";
String str2 = new String("abc");
System.out.println(str1==str2); //false
创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。
===========================================
当比较包装类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==。
由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。
分享到:
评论

相关推荐

    Java程序设计基础:创建String字符串.pptx

    创建String对象 String类型 直接赋值方式,例如:String s1= "Welcome to Java"; 含义:字符串常量直接初始化一个String对 象,赋值给引用变量,s1指向字符串对象。 字符串变量中存储的是对象的地址。 例 1: String...

    java 面对对象编程.pdf.zip

    对象实体与对象引用有何不同? 对象的相等和引用相等的区别 类的构造方法的作用是什么? 如果一个类没有声明构造方法,该程序能正确执行吗? 构造方法有哪些特点?是否可被 override? 面向对象三大特征 封装 继承 多态 ...

    JAVA面向对象详细资料

    7 引用与实例 11 8 实例属性与实例方法 11 9 实例属性与实例方法的使用 12 10 实例属性属于实例本身,与其他实例没有关系 13 11 javaBean编码规范 14 12 练习: 15 13 什么构造方法 16 14 构造方法的作用? 17 15 ...

    Java问题宝典2012版

    这两行代码执行后,原始的String对象中的内容到底变了没有? 24 32、是否可以继承String类? 25 33、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别? 25 34、String 和StringBuffer的...

    第4章-Java面向对象程序设计-Java语言GUI程序设计-赵满来-清华大学出版社.pptx

    4.1 类的方法 4.2 类封装与访问控制 4.3 类的继承 4.4 多态性 4.5 接口 4.6 Java的内部类 4.7 Lambda表达式初步 第4章-Java面向对象程序设计-Java语言GUI程序设计-赵满来-清华大学出版社全文共51页,当前为第2页。...

    Java面向对象程序设计(苏健版)

    System.out.println("编号为"+rect1.id+"的矩形对象的周长与面积分别是"); int width1 = rect1.xBottomRight - rect1.xTopLeft; //第1 个矩形对象的宽度 int height1 = rect1.yBottomRight - rect1.yTopLeft; ///...

    [java]读书笔记整理:一切都是对象

    然而,s指向的String对象仍然继续占据内存空间。在这一小段代码中,我们似乎无法再访问这个对象,因为对它唯一的引用已超过了作用域的范围。[后续在说,在程序执行过程中,怎样传递和赋值对象引用]。 事实证明,由...

    java面向对象程序设计.pptx

    教学目标 理解数据抽象和数据隐藏 创建类 能够创建和使用对象 能够控制对实例变量和方法的访问 方法的重载 构造函数的使用 理解this引用的用法 理解Java的垃圾收集机制 static方法和域的使用 类的组合 包的创建和...

    String.pdf

    在java、C#中,String类对象创建后,字符串一旦初始化就不能更改,因为string类中所有字符串都是常量,数据是无法更改,由于string对象的不可变,所以可以共享。对String类的任何改变,都是返回一个新的String类...

    对String的深入理解

    字符串文字"abc"是一个String对象; 文字池[pool of literal strings]和堆[heap]中的字符串对象。 一、引用变量与对象:除了一些早期的Java书籍和现在的垃圾书籍,人们都可以从中比较清楚地学习到两者的区别。A aa...

    Java中String类和IO流——学习小结

    String类对象创建后是一个常量,有final修饰,不能被修改。字符串重新赋值不是修改,而是生成了一个新的字符串,原先的字符串依旧在内存中,但是引用变量不再指向它,过后原字符串因没被使用也会被Java GC机制回收。...

    String a="hello" String b="hello" a==b 返回true的问题分析

    //在java中有一个常量池,当创建String 类型的引用变量给它赋值时,java会到它的常量池中找"hello world"是不是在常量池中已存在。如果已经存在则返回这个常量池中的"hello world"的地址(在java中叫引用)给变量a 。...

    java源码包---java 源码 大量 实例

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    Java的六大问题你都懂了吗

    我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句:String string = s;我们是声明了另外一个只能指向String对象的引用,名为string,...

    Java开发技术大全(500个源代码).

    localVSmember.java 局部变量与成员变量同名问题示例 onlyTest.java 对象传值示例 otherClass.java 从类的外部访问对象的成员 showInstVar.java 演示不同的对象拥有不同的成员变量 showMain.java 演示main方法...

    关于Java的几个经典问题

    到底创建了几个String对象(三)——变量(属性)的覆盖 (四)——final、finally和finalize的区别 (五)——传了值还是传了引用(六)——字符串(String)杂谈 (七)——日期和时间的处理 (八)——聊聊基本...

    Java初学者都必须理解的六大问题

    我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句:  String string = s;  我们是声明了另外一个只能指向String对象的引用,...

    java 面试常问的问题 如何回答

    这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别? 23 34、String 和StringBuffer的...

    Java面向对象程序设计.doc

    《Java面向对象程序设计》模拟试题(A卷)赞赞 " " " " "《Java面向对象程序设计》模拟试题(A卷) " "专业年级:学号: 姓名: 日期: " "一、判断题(15') " "1.Java程序里,创建新的类对象用关键字new,回收无用的...

    Java String 十大常见问题

    1.字符串比较,使用“==”还是equals()?...  String是不可变对象,意思是一旦创建,那么整个对象不可以改变,即使新手觉得String引用变了,实际上只是(指针)引用指向了另一个(新的)对象。  而程序员可

Global site tag (gtag.js) - Google Analytics