A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© rover0321 中级黑马   /  2014-6-22 16:57  /  4115 人查看  /  29 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 rover0321 于 2014-6-22 16:57 编辑

总结了一些关于String 对象引用与字符串常量比较的问题。
  1. public class StringTest
  2. {

  3.     /**
  4.      * @param args the command line arguments
  5.      */
  6.     public static void main(String[] args)
  7.     {
  8.         String a = "hello";
  9.         String b = "hello";
  10.         String newA = new String("hello");
  11.         String c = "hel";
  12.         String d = "lo";
  13.         final String finalc = "hel";
  14.         final String finalgetc = getc();

  15.         System.out.println("a == b ? " + (a == b));
  16.         System.out.println("a == newA ? " + (a == newA));
  17.         System.out.println("a == hel + lo ? " + (a == "hel" + "lo"));
  18.         System.out.println("c == finalc ? " + (a == finalc + "lo"));
  19.         System.out.println("c == finalc ? " + (a == finalgetc + "lo"));
  20.         System.out.println("a == c + d ? " + (a == c + d));
  21.         System.out.println("finalgetc == finalc ? " + (finalgetc == finalc));
  22.     }
  23.    
  24.     private static String getc()
  25.     {
  26.         return "hel";
  27.     }
  28. }
复制代码



单选投票, 共有 23 人参与投票
您所在的用户组没有投票权限

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

29 个回复

倒序浏览
哪位给分别解释一下啊?
回复 使用道具 举报
求楼主解释一下。
回复 使用道具 举报
  1. System.out.println("c == finalc ? " + (a == finalc + "lo"));
  2.         System.out.println("c == finalc ? " + (a == finalgetc + "lo"));
复制代码



这两个结果怎么不一样呢??
回复 使用道具 举报
黎志勇 发表于 2014-6-22 20:14
求楼主解释一下。

我在以下blog做了解释
http://blog.csdn.net/rover0321/article/details/33332197
回复 使用道具 举报
毅心缘 发表于 2014-6-23 01:10
这两个结果怎么不一样呢??


我在以下blog做了解释
http://blog.csdn.net/rover0321/article/details/33332197
回复 使用道具 举报
波涛 发表于 2014-6-22 20:07
哪位给分别解释一下啊?


我在以下blog做了解释
http://blog.csdn.net/rover0321/article/details/33332197
回复 使用道具 举报
波涛 中级黑马 2014-6-23 22:30:58
8#
rover0321 发表于 2014-6-23 19:12
我在以下blog做了解释
http://blog.csdn.net/rover0321/article/details/33332197

页面404, 博客页面没找到!
回复 使用道具 举报
没有该页面!
回复 使用道具 举报
太神奇了……求解释。
回复 使用道具 举报
求解释下 你这个博客打不开啊
回复 使用道具 举报
你的博客还没审批通过呢。看不到啊
回复 使用道具 举报
哪位给分别解释一下啊?
回复 使用道具 举报
进来学习
回复 使用道具 举报
MARK MARK MARK
回复 使用道具 举报
我来看一下....
回复 使用道具 举报
感谢楼主 学习了,
回复 使用道具 举报
你能解释一下==  和equals的用法么,,想知道啊
回复 使用道具 举报
String newA = new String("hello");  
        // 1.栈内存中创建一个String类型的引用变量newA;  
        // 2.在字符串常量池中寻找有没有"hello",如果没有则在字符串常量池中创建对象  
        // 如果有则将地址直接返回对象引用。  
        // 3.通过向构造函数传递另外一个字符串对象的引用在堆中创建一个新的对象,并将地址  
        // 赋给引用变量newA。  
关于这个字符串创建问题
用创建引用类型的方法得到的字串
应该是不管 地址池中有没有这个"hello" 都会重新再去创建一个“hello”指向新的对象
根本不会到地址池中去寻找

点评

就会新建一个字符串,然后把这个地址值赋给这个对象,  发表于 2014-6-26 14:48
这是创建了对象引用,new String(“hallo”)会在堆内存中产生一个对象,里面存的是字符串常量池中某个地址值,这个字符串如果原来常量池里没有的话...  发表于 2014-6-26 14:46
回复 使用道具 举报

可以看了。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马