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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HuaiYan 初级黑马   /  2018-4-16 17:30  /  937 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  如果你认为自己用应该超越了初学者,却不懂这些问题,请叫我一声达者!
问题一:下面语句声明了什么?
String s="HelloWorld";
  如果你的回答是:一个String,内容是"HelloWorld";那么请回到页首位置,称呼我为一句达者!
syso来上一条华丽的分割线        System.out.println("===============");
正确回答:
  这句语句声明的是一个指向对象的引用,名为“s”可以指向类型为String的任何对象,而这句语句目前指向"HelloWorld";这个String类型的对象,并没有声明一个String对象,只是声明了一个指向String对象的引用变量“s”。
后面代码再加上这句,String string=s;,也并未产出第二个对象,“s”和“String”都指向同一个对象

问题二:
"=="和equals方法究竟有什么区别?
"=="比较好理解,它所进行的操作是进行等值比较
比如:int a=10;
          int b=10;
a==b;这句是的返回值是true!
比如:String  a=new String("abc");
          String  b=new String("abc");
此处a==b;将返回false,对象变量其实是一个引用,它们的值是指向对象的内存地址,而不是对象本身,又因为这个都是new出来的,其实这两个值各有各的地址,所以此处用“==”只是进行地址比较,而不对内容进行比较,那么equals方法又会是怎样的操作呢?其实这个方法体归属于Object类,它的操作包含了“==”,所以如果你去做对比
要根据它所定义的类方法进行情况而定,当然此处a.equals(b);返回的肯定是true!

问题三:String到底变化了没有?
回答:肯定没有,因为这个类的初始设置就是不可变类,所以他的所有对象都是不可变对象。当我们以为它变了的时候,其实它已经创建了一个新的对象!



1 个回复

倒序浏览
你搞懂了嘛?很棒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马