对一道基础string题及其变式题的思考与解析

1、下面程序的运行结果是()(选择一项)
String str1=“hello”;
String str2=new String(“hello”);
System.out.println(str1==str2);

A.true

B.false

C.hello

D.he
答案:B
分析:str1没有使用new关键字,在堆中没有开辟空间,其值”hello”在常量池中,str2使用new关键字创建了一个对象,在堆中开辟了空间,”==”比较的是对象的引用,即内存地址,所以str1与str2两个对象的内存地址是不相同的。

简单变式:
下面程序的运行结果是
String str1 = “hello”;
String str2 = “he” + new String(“llo”);
System.err.println(str1 == str2);
A.true
B.false
C.exception
D.无输出
正确答案:B
链接:https://www.nowcoder.com/questionTerminal/f06ee75317c44b44b43b10b1ffc866bd?pos=15&mutiTagIds=570_609_637_614&orderByHotValue=0
来源:牛客网
解析:
String str1= “hello”, String str2=“he”+“llo”;之所以str1str2返回true是因为两者都是在字符串常量池中(由于初始化就会在此区域分布内存)而常量池中的有个与栈区类似的特性,就是当str2指向的常量在常量区已存在时,他不会创建新的内存空间来存此常量,而是指向已有常量的内存(应该是以此节约空间),此时str1与str2这两个引用变量的值都是存"hello"的内存空间地址,但是String str3= “he”+a;String a=“llo”;时str1str3返回的为false,是因为:str1指向的hello在编译期一如既往的还是分配在常量区内,a指向的llo也在常量区,虽然str3也是初始化但是编译器无法判断a这货到底是什么个情况,进而不会将str3的等号右侧声明在常量区内,而是在通过构造时在堆区中的非常量池外的内存中声明,至此str3与str1不止是分配内存的时期不同(一个在编译期,一个在运行期)而且在内存空间的区域也不同。另:“==”在java发中是判断引用是否相等(内存中的地址是否相等,并不是值相等),new String(“llo”)之后肯定是在堆内存中开辟内存空间,所以地址改变,若是判断 String str1=str2; System.out.println(“str1=str2:”+(str1=str2)); 答案:true。

后记:由于还是大二,最近沉迷于算法中有点不能自拔,学c和c++有点上瘾,今天上了一天校企合作的Java培训课。以前学过的Java基础都忘得差不多了。故打算写几篇博客来回忆复习忘掉的知识。后期还会继续更新,恳请看到博文的各位帮忙指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redo Log 和Checkpoint not complete

首先我们来看下 alertSID.log 日志: Mon Nov 30 17:31:54 2009 Thread 1 advanced to log sequence 14214 (LGWR switch) Current log# 3 seq# 14214 mem# 0: /u03/oradata/newccs/redo03.log Mon Nov 30 17:34:29 2009 Thread 1 advanced to log sequence 14215 (L…

组合数学中的项链计数

给c种不同颜色宝石能穿成多少种长度为s的宝石项链(本质不同) Burnside定理的应用: 当n为奇数时,有n种翻转,每种翻转都是以一个顶点和该顶点对边的中点对称。有k^(n/21)*n种。 当n为偶数时,有n种翻转&#x…

蓝桥杯 算法训练(四)结点选择(树形动态规划)

结点选择(树形动态规划)C语言 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少? 输入格式 第一行包含一个整数…

SCVMM

通过SCVMM实现并管理虚拟机高可用性 1、 添加群集主机2、 创建虚拟网络3、 创建虚拟机并实现高可用性接着上一篇文章,这次我们来看一下,如果通过SCVMM R2来实现虚拟机的高可用性。首先将群集主机添加到SCVMM 1、 登陆到计算机Win2008R2,打开S…

机器学习统计学相关书籍

1. 《统计学完全教程》 All of statistics 卡耐基梅隆 沃塞曼 2. 第四版《概率论与数理统计》 莫里斯。德格鲁特(Morris H.DeGroot)和马克。舍维什(Mark J.Shervish) 3. 《线性代数导论》 吉尔伯特。斯特朗--网上视频教程堪称经…

序列化包含多种不明类型的集合

序列化包含多种不明类型的集合 代码:/Files/zhuqil/Kirin.rar 导言: 你是否曾经想过序列化构造对象,它里面有一个集合,这个集合包含接口或者抽象类?你是否不知道所有的你要序列化的类型?好吧,如果这样&…

机器学习入门方法推荐(少走弯路)入门视频推荐

入门可以看看下列的几个课程。第一第二个公认的经典了。1、首先当然是吴恩达的经典机器学习了, 可以在万能的b站搜,也可以在网易公开课搜 吴恩达机器学习http://study.163.com/course/courseMain.htm?courseId10045700292、台大林轩田教授的机器学习基石…

NLP大神推荐的机器学习入门书单(附大量百度网盘电子书)

转载自:http://blog.csdn.net/surgent777/article/details/53895048 继NLP之后,我又开了ML这个大坑。这是因为NLP涉及到太多的ML模型,仅仅拿过来用的话,我实现的HanLP已经快到个人极限了。而模型背后的原理、如何优化、如何并行化…

$HOME/$user/.权限导致用户无法登陆图形界面

在redhat linux下,用户登陆图形界面时将在$HOME/$user/.目中添加隐藏文件(以.开头的文件),如果在无意中将$HOME/$user/.的写权限去除,将会导致用户无法成功登陆gnome,在正确输入用户名和密码的情况下&#…

想要入坑机器学习?这是MIT在读博士的AI心得

从科研社区中汲取营养找论文AI 领域的论文可以在 arXiv 上找到和发布。现在的论文数量非常令人振奋。社区中的许多人降低了从噪声中分辨出信号的难度。Andrej Karpathy 开发了 arXiv sanity preserver,帮助分类、搜索和过滤特征。Miles Brundage 每晚都在推特上发布…

修改EIGRP 路径cost 值,以及分析和实现等价与非等价负载均衡

一、拓扑图:二、配置各路由器的IP和EIGRP 协议,并保证邻接关系的形成。1、我要达到的目的是要让R2到192.168.14.0/24这个网段能在R2和R1断开之后,形成网网络的快速收敛。因为根据EIGRP 的次优路径进拓扑关系的形成条件是要满足FC(…

C++函数的用法:erase函数

前面的文章中提到过如何向容器中添加元素,这里介绍一个如何删除容器中元素的函数,包括顺序容器和关联容器。 就是这个erase函数,基本用法如下: c.erase(p)------------------------------从c中删除迭代器p指定的元素,…

关注BLUEBEE的浏览器发展

其实我并不认识蓝峰这个人。只是偶尔发现这个人在我的博客中转了一下。怀着好奇的心情回访了一下。发现此人正在开发浏览器。目前IE内核的浏览器实在太多了。除了IE本身如遨游,世界之窗,包括360,还有腾讯的TT。。。。。但我为什么要关注蓝峰的…

Ubuntu 9.10 升级到ext4

最近一直在使用ubuntu系统,当时升级到9,04的时候,也没有在意系统的文件系统变了;当使用一段时间之后,发现系统没有8.10时使用的顺畅,这时才发现9.04之后心内核都支持ext4文件系统,该文件系统要比…

史上最简单的软件破解——5行脚本代码完美破解99%的过期软件

如果你看到了这篇博文,绝对保证不虚此行。仅仅5行脚本代码,即可破解99%的过期软件。 这件事的背景:最近在找了一些学习资料,其中有Rational Rose画的图,好久没用过它了。今天安装好,导入许可文件&#xff…

Jquery getJSON方法分析(二)

getJSON与aspx准备工作Customer类publicclassCustomer{ publicintUnid { get; set; } publicstringCustomerName { get; set; } publicstringMemo { get; set; } publicstringOther { get; set; }}(一)ashxCustomer customer newCustomer …

自适应阈值算法(大津阈值法)

最大类间方差法是由日本学者大津于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU。它是按图像的灰度特性,将图像分成背景和目标2部分。背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致2部分差…

数据在链路层传播相关时间计算

本来很懵逼的 看到这篇文章基本全懂了 一般这种题目会让我感觉很是煎熬,不知道怎么算。终于打通这类题目,总结到这里。 先看这类题目的常见表述:如图所示,图中路由器采用存储–转发的方式,所有链路的传播速率均为100…

多年以后重发:多线程安全的变量模板

大家好,这里是我以xghome这个用户名,02年在CSDN上发布的《多线程安全的变量模板》,这次在《0bug -- C/C商用工程之道》一书中,作为“资源锁”和多线程通信核心示例,也再次出现。这个模板我当初大约写了19遍&#xff0c…