前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java核心技术讲解六

Java核心技术讲解六

作者头像
用户2196435
发布2018-07-19 17:37:05
5240
发布2018-07-19 17:37:05
举报
文章被收录于专栏:LuckQILuckQI
次次文章简单的学习了虚拟机相关的知识。可以点击java核心技术讲解学习五

这篇文章来说下简单的知识,也是我们经常用的String ,StringBuffer,StirngBuilder.

String

String 是一个典型的Immutable(不可变)类。在实现的上被申明为final class.并且其属性也是final。 所以其不可变性导致在进行字符串操作的时候很容易产生。

  • String 因为是不可变类。我们在对其进行操作的时候都能保证了基础的线程安全。我们无法对其内部进行修改。
  • Stirng内部底层是用的char数据存储。在Java9中引入了一种新的设计,将其底层改为byte数组,数据存储方式改为了byte数组加上一个标识编码。
  • 字符串的创建 机制,String content ="111"; 该方式会将值 放入字符串常量池
  • Stirng ss = new String("111"); 不放入字符串常量池。
  • 只对常量池的优化, 当两个对象拥有同样的值时,只是常量池中的一个拷贝。当一个字符串内容经常出现时,可以大幅度节省内存空间。
  • 在Java8中 对字符串进行了优化,字符串拼接 编译的时候会直接编译成StringBuilder。

StringBuffer

StringBuffer 是为了解决String在进行字符串拼接过程中产生大量中间对象而形成的的一个类。我们可以使用其进行字符串的拼接,使用append或者add方法来实现 。

  • 该方法是一个线程安全的可修改字符序列,保证了线程安全,这样就会带来额外消耗,所以我们在多线程时可以使用该类进行操作 ,建议使用StringBuffer,例如XML解析、HTTP参数解析与封装。。
  • 默认初始值对象大小为16,跟数据类似。如果需要进行扩容的话,会进行数据内容的复制。增加性能的损耗。如果大概知道数据大小,那么可以进行指定大小。

StringBuilder

StringBuilfer与StringBuffer基本上没什么区别,但是特点是该StringBuilder是线程不安全的,在单线程上操作比StringBuffer性能损耗小。

  • 我们在操作字符串的时候,需要大量的字符串操作,可以采用StringBuilder.例如 在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在单线程环境下,建议使用StringBuilder,例如SQL语句拼装、JSON封装等 。
  • 其中 默认初始值对象大小为16,跟数据类似。如果需要进行扩容的话,会进行数据内容的复制。增加性能的损耗。如果大概知道数据大小,那么可以进行指定大小。

说完字符串我们来说下int和Integer的区别,了解其类型让我们在开发过程中更加方便

int和Integer

int

int就是我们常说的几种原始类型之一(boolean、byte 、short、char、int、float、double、long)字节占用是4字节。 我们在一些大数据进行开发的时候需要特别的包装类型和原始数据类型的应用。

  • 原始数据类型不保证线程安全性,我们可以使用线程安全的类

Integer

Integer 是int的包装类型,该类也是一个不可变类。可以与int进行转换。

自动装箱和自动拆箱

在笔者原先做web开发的时候并没有注意对int类型还有Integer类型特别的注意,因为在这里面笔者并没有注意自动装箱和自动拆箱的作用,在这次大数据进行开发的时候,因为我们内存的原因并且处理量太大,不容易处理,java中自动拆箱和自动装箱让笔者才注意到。

  • 我们在编程中要避免无意中的装箱和拆箱行为,特别是在处理数据量特别大的情况下,创建100万个对象跟100万个整数性能开销是不同的。因为包装类型里面还包含着对象头这些信息,占用数据内容太大。导致性能降低。解决方案建议用原始数据类型,,数组或者本地代码来实现替换。
  • 对象头在对象中究竟占用了多少呢? 对象分为 对象头,对象实例,对其填充。我们这次先说下这个分类。等下次再进行分析

Java原始数据和引用类型局限性

  1. 原始数据类型在泛型中不能使用,我们在使用泛型的时候必须转为Object类型。
  2. 无法高效的表达数据,也不方便表达复杂的数据结构。 数据存储的是引用,原始数据类型是连续的内存。但是对象一般都是分散在堆中的不同位置。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LuckQI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档