大家都知道在String之间的内容比较的时候,是通过equals函数比较的。

但是在在许多的面试题中,总是出现一堆的判断两个String对象通过==比较的结果,实际上是考的Java内存分配机制。

Java内存分配机制中,常量是保存到常量区的,而对象是保存到堆里面的,基本类型的临时变量是保存到栈里面的,所以就有了下面的一段代码:

public class Test {

    public static void main(String[] args) {
String x = "abc1";
String s = "1";
int i = 1; String y = "a" + "b" + "c" + 1;
System.out.println(x == y);//true y = "a" + "b" + "c" + "1";
System.out.println(x == y);//true y = "ab" + "c" + 1;
System.out.println(x == y);//true y = "ab" + "c" + 3 % 2;
System.out.println(x == y);//true y = "abc" + s;
System.out.println(x == y);//false y = "abc" + i;
System.out.println(x == y);//false y = "abc" + getS();
System.out.println(x == y);//false } public static String getS() {
return "1";
}
}

从这段代码可以看出,如果想要x==y是true,则x和y都必须是通过常量初始化的或拼接得到的,否则都会返回false。

最新文章

  1. Spring Boot启动流程详解(一)
  2. 怎样使用My97日期控件
  3. 理解 Cinder 架构 - 每天5分钟玩转 OpenStack(45)
  4. nodejs入门 SSH服务器远程部署nodejs2
  5. LeetCode: Path Sum II 解题报告
  6. apache学习
  7. [React] Radium: Updating Button Styles via Props
  8. iPhone 设置铃声
  9. CI Weekly #16 | 从另一个角度看开发效率:flow.ci 数据统计功能上线
  10. FPGA IN 金融领域
  11. hdu_1017(水水水,坑格式)
  12. win10被微软流氓更新后编译基于visual Studio的web项目报[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围
  13. PHP Misc. 函数
  14. css背景图片充满DIV
  15. jquery横向纵向鼠标滚轮全屏切换
  16. mysql进制之间的转换
  17. 开源文件服务器file-service介绍
  18. javaScript之表格操作<一:新增行>
  19. camera-arm-RPI
  20. vue控制台报错

热门文章

  1. 【flyway】Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' def
  2. Oracle RAC环境下怎样更新patch(Rolling Patch)
  3. BUPT复试专题—找K小数(2011)
  4. 转:libev和libevent的设计差异
  5. SolidEdge如何修改线型和线宽
  6. linux系统之shell编程-正則表達式
  7. leetcode题解||Container With Most Water问题
  8. UVA 11246 - K-Multiple Free set(数论推理)
  9. redis中关于过期键的删除策略
  10. spark0.9.1集群模式执行graphx測试程序(LiveJournalPageRank,新增Connected Components)