1. String的创建

String s = new String("abc");

String s1 = "abc";

String s2 = new String("abc");

System.out.println(s == s1);

System.out.println(s == s2);

System.out.println(s1 == s2);

请问以上程序执行结果是什么?

第一句执行后内存中有两个 对象,而不是一个。一个由new String("abc")中的"abc"在String Pool里生成一个值为"abc"的对象;第二个由new在堆里产生一个值为"abc"的对象,该对象完全是String Pool里的"abc"的一个拷贝。变量s最后指向堆中产生的"abc"对象;

第二句执行时,s1先去String Pool找是否有值为"abc"的对象,很显然在上一步中java已经在String Pool里生成一个"abc"对象了,所以s1直接指向String Pool中的这个"abc";

第三句中又有一个new,在java中凡遇到new时,都会在堆里产生一个新的对象。因此,该句执行后堆里又多了一个"abc"对象,这与执行第一句后生成的"abc"是不同的两个对象,s2最后指向这个新生成的对象。

因此,执行后面的打印语句的结果是三个false

2. String的拼装

String hello = "hello";

String hel = "hel";

String lo = "lo";

System.out.println(hello == "hel" + "lo");

System.out.println(hello == "hel" + lo);

String hello = "hello";String hel = "hel";String lo = "lo";System.out.println(hello == "hel" + "lo");System.out.println(hello == "hel" + lo);

请问以上程序执行结果是什么?

前三句在String Pool里分别产生“hello”、“hel”、“lo”三个常量字符串对象

当做第一个加法连接时,+号两边都是常量字符串,java就会将两者拼起来后到String Pool里找与之相等(用equals)的字符串,若存在则将其地址返回;不存在则在String Pool里新建一个常量对象,其值等于拼接后的字符串,并将其地址返回。

第二个+号两边有一个是变量,此时,java会在堆里新建一个对象,其值是两字符串拼接后的值,此时返回的地址是堆中新对象的地址。

所以,第一句做+连接后返回String Pool中“hello”的地址,显然与变量hello的地址相等;

第二句返回的是堆中地址,显然与变量hello的地址不等;

java 字符串 面试_Java 字符串面试题相关推荐

  1. java 字符串面试_Java字符串面试问答

    java 字符串面试 String is one of the most widely used Java Class. Here I am listing some important Java S ...

  2. java中高级面试_Java中高级面试题及答案

    原标题:Java中高级面试题及答案 在掌握了Java技术之后,面试就成为马上要面临的问题了.面对面试官的问题,提前做好准备能够有助于你的临场发挥,以下是一些Java面试中高频出现的一些问题,有一部分是 ...

  3. java netty 面试_Java 200+ 面试题补充② Netty 模块

    让我们每天都能看到自己的进步.老王带你打造最全的 Java 面试清单,认真把一件事做到最好. 1.Netty 是什么? Netty 是一款基于 NIO(Nonblocking I/O,非阻塞IO)开发 ...

  4. java idwork长度_java 字符串id

    Java FutureTask import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.c ...

  5. java字符串转字符串数组_Java字符串数组到字符串

    java字符串转字符串数组 Today we will look into how to convert Java String array to String. Sometimes we have ...

  6. java 字符串函数_Java字符串函数– 25+必须知道方法

    java 字符串函数 Java字符串函数 (Java String Functions) Java String class has a lot of functions to manipulate ...

  7. java字符串转字符串数组_Java字符串数组

    java字符串转字符串数组 Java String array is used to hold fixed number of Strings. String array is very common ...

  8. java 字符 加密_Java 字符串的加密与解密

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为了保证程序的安全,经常需要用到数据加密的方法.Java 中提供了专门用于加密运算的类和接口. 除了使用加密类和接口外,还可以通过多种方式实现字符串的加密 ...

  9. java拼接字符串的_Java字符串拼接(连接)

    对于已经定义的字符串,可以对其进行各种操作.连接多个字符串是字符串操作中最简单的一种.通过字符串连接,可以将两个或多个字符串.字符.整数和浮点数等类型的数据连成一个更大的字符串. String 字符串 ...

最新文章

  1. RPM包制作之Spec文件详解
  2. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | AMS 启动前使用动态代理替换掉插件 Activity 类 )
  3. IDEA中Project 和 Module的区别
  4. 高并发大流量专题---10、MySQL数据库层的优化
  5. IdentityServer4-MVC+Hybrid实现Claims授权验证(四)
  6. Hadoop生态系统学习路线
  7. cad2019菜单栏怎么调出来_Mac苹果鼠标移动速度设置到最快还是太慢了,你可以这样调~...
  8. 奔驰又召回了!“方便进出”功能翻车
  9. Android Graphviz 安装
  10. jstl错误:According to TLD or attribute directive in tag file, attribute value does not accept any expr
  11. Office web component learning ---- Spreadsheet learning
  12. javascript 检测密码强度 美化版
  13. 阶段3 2.Spring_06.Spring的新注解_1 spring的新注解-Configuration和ComponentScan
  14. 开源公司内部的微信爬虫,寻求志同道合的人一起来改进
  15. 2022年度成都市工程系列专业技术高级职称申报评审工作内容及所需材料
  16. 奕东电子深交所上市:市值115亿 小米产业基金是股东
  17. 好用又好玩的微信小程序大全
  18. Epicor ERP 学习笔记
  19. php htmlpurifier,htmlpurifierPHP过滤库
  20. Python-阿里云地图的爬取

热门文章

  1. php人工智能客服,人工智能技术在客服中心的四大应用
  2. 关于mysql的一些问题_关于mysql的一些细节问题
  3. lru页面置换算法_C|内存管理|从LRU王国到NRU王国
  4. ue编辑器拖拽上传图片_为百度UE编辑器上传图片添加水印功能
  5. earcharts tree 节点间隔_InnoDB是顺序查找B-Tree叶子节点的吗?
  6. [Black Watch 入群题]PWN 栈劫持的利用
  7. python中修改列表元素的2种方法
  8. python元类简述
  9. vscode怎么用命令行打开本地项目(code .)
  10. 标注(annotation)的反向优化策略 将Yunyang tensorflow-yolov3 predicted转换为正常yolo标注