笔试中经典的String题目
来源:互联网 发布:陶瓷刀 知乎 编辑:程序博客网 时间:2024/06/01 01:34
请问以上程序执行结果是什么?
第一句执行后内存中有两个对象,而不是一个。一个由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
请问以上程序执行结果是什么?
设s为String类型的变量,当执行s.intern()时,java先在String Pool里找与字符串变量s相等(用equals()方法)的字符串,若有则将其引用返回;若没有则在String Pool里创建一个与s的值相等的字符串对象,并将其引用返回。从中我们可以总结出intern()方法无论如何都将返回String Pool里的字符串对象的引用。
因此,以上程序执行的结果是false,true,true。
PS:设s和t为两个字符串变量,若有s.equals(t),必有s.intern() == t.intern();
PS:"=="永远比较的是两边对象的地址是否相等。
请问以上程序执行结果是什么?
前三句在String Pool里分别产生“hello”、“hel”、“lo”三个常量字符串对象
当做第一个加法连接时,+号两边都是常量字符串,java就会将两者拼起来后到String Pool里找与之相等(用equals)的字符串,若存在则将其地址返回;不存在则在String Pool里新建一个常量对象,其值等于拼接后的字符串,并将其地址返回。
第二个+号两边有一个是变量,此时,java会在堆里新建一个对象,其值是两字符串拼接后的值,此时返回的地址是堆中新对象的地址。
所以,第一句做+连接后返回String Pool中“hello”的地址,显然与变量hello的地址相等;
第二句返回的是堆中地址,显然与变量hello的地址不等;
编程1:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
- 笔试中经典的String题目
- 嵌入式的笔试/面试经典题目
- 经典易错的笔试题目集锦
- 2015 百度笔试的一道经典题目
- 指针的笔试面试经典题目
- 经典笔试题目
- 经典笔试题目分析
- 经典笔试题目分析
- 经典笔试题目
- JAVA经典笔试题目
- CC++笔试经典题目 1
- C/C++笔试经典题目
- C++笔试经典题目总结
- 一些笔试中会出现的题目
- Java的String经典笔试题付注解
- Java的String经典笔试题付注解
- 嵌入式程序员C语言笔试经典题目
- C语言方向_经典笔试题目
- Linux目录结构及解释
- 解决cakePHP中的. session_start()[function.session-start];open_basedir restnction in effect.File(c:/windows/temp/)is not within the a
- java注册机源码(java源码,支持6.5,7.0)
- WinCE NAND flash - FAL
- 捕获500,404
- 笔试中经典的String题目
- 拍照、录音、读写存储卡的用户权限
- PMP答题36计之24,还有12没找到,~~~~(>_<)~~~~
- Flex 对象属性 对象类型
- http 1.1 协议错误代码解析 500 404
- Error listenerStart when tomcat started
- HTML中ul,ol,li,dl,dt,dd标签用法
- C# RichTextBox高度随内容动态变化
- excel版本号对应