文档章节

关于字面量字符串的效率问题

大海
 大海
发布于 2016/07/09 16:27
字数 396
阅读 13
收藏 0
@RestController
public class FirstRestController {
	
	private String str1;
	private String str2;
	@RequestMapping("/rest")
	public String out(){
		str1 = "hello world";
		return str1;
	}
	
	@RequestMapping("/rest2")
	public String out2(){
		str2 = "hello world";
		return str2;
	}
	@RequestMapping("/comp")
	public Boolean comp(){
		return str1 == str2;
	}
}
@RestController
public class FirstRestController {
	private static final String str = "hell world";
	@RequestMapping("/rest")
	public String out(){
		return str;
	}
	
	@RequestMapping("/rest2")
	public String out2(){
		return str;
	}
}

第一个图中的源码,在每次收到请求的时候都会创建一个字面量的字符串hello world,根据字符串的常量池特性,每次变量被一个字面量字符串赋值时都会去字符串常量池看一下是否有这和这个字符串相同的字符串(equals),如果有的话直接返回该字符串,这个做法的好处就是不会重复创建相同的字符串,如果new的话就例外了,new会在堆中开辟一个空间用来存放这个字符串对象。

再来看看第二个图的源码,在控制器中定义了一个static final的字符串,说明该字符串是控制器的静态私有变量,类中的所有方法都可以直接使用这个字符串。好处在于,每次收到请求的时候都会直接返回这个私有字符串,而不会先去常量池里看看是否存在这个字面量字符串。效率要比第一个更高。所以在遇到一个方法调用某个固定字符串的时候,最好直接引用某个已经赋值的字符串变量,因为效率更高

© 著作权归作者所有

共有 人打赏支持
大海
粉丝 2
博文 84
码字总数 32431
作品 0
杭州
程序员
我终于搞清楚了和String有关的那点事儿。

String,是Java中除了基本数据类型以外,最为重要的一个类型了。很多人会认为他比较简单。但是和String有关的面试题有很多,下面我随便找两道面试题,看看你能不能都答对: Q1:定义了几个对...

06/24
0
0
基本类型和操作之理解Symbol类型

相信很多人和我一样,在刚接触scala时,会觉得Symbol类型很奇怪,既然Scala中字符串都是不可变的,那么Symbol类型到底有什么作用呢?简单来说,相比较于String类型,Symbol类型有两个比较明显...

柳哥
2014/06/05
0
0
Android冷知识——Java中的字符串常量池

字符串常量池 JVM为了减少字符串对象的重复创建,其内部维护了一个特殊的内存,这段内存被成为字符串常量池(方法区中)。实际上还有整型常量池、浮点型常量池等等。字符串常量池存放的是对象...

qq_30379689
05/31
0
0
Java中关于乱码的认识和解决办法

前几天在使用中兴的MM7接口开发一个彩信的应用,可是在测试的时候,手机收到的文本内容总是一堆乱码,不管怎么修改参数问题都得不到解决,于是就狠狠的琢磨和研究了下关于编码的内容,最终成...

mybabe0312
2015/12/30
0
0
Python 2 与 Python 3 的差异对比

这篇文章总结了一些与Python2.6相比Python3.0中的新特性.Python3是一个不向后兼容的版本,有了很多的改变,这些对于Python开发者来说是非常重要的,虽然多数人说Python3真正流行起来还需要一...

大数据之路
2013/11/02
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
31分钟前
1
0
我为什么用GO语言来做区块链?

Go语言现在常常被用来做去中心化系统(decentralised system)。其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地。 我们在决定做Karachain的时候,考量(b...

HiBlock
37分钟前
1
0
大数据学习脑图以及入门教程!

近些年,大数据的火热可谓是技术人都知道啊,很多人呢,也想学习大数据相关,所以,这里分享几个大数据脑图,希望可以让你清楚明白从哪里入门大数据,知道该学习以及掌握哪些知识点; 大数据...

董黎明
今天
1
0
聊聊redis的监控工具

序 本文主要研究一下redis的监控工具 redis-stat redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redis性能。 docker运行 docker r...

go4it
今天
2
0
TypeScript基础入门之高级类型的索引类型(Index types)

转发 TypeScript基础入门之高级类型的索引类型(Index types) 高级类型 索引类型(Index types) 使用索引类型,编译器就能够检查使用了动态属性名的代码。 例如,一个常见的JavaScript模式是从...

durban
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部