美文网首页写作与程序
Java核心技术讲解六

Java核心技术讲解六

作者: 胖琪的升级之路 | 来源:发表于2018-05-21 23:51 被阅读15次

上次文章的简单的学习了虚拟机相关的知识。可以点击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. 无法高效的表达数据,也不方便表达复杂的数据结构。 数据存储的是引用,原始数据类型是连续的内存。但是对象一般都是分散在堆中的不同位置。
星球和公众号.jpg
联系我

相关文章

  • Java 语言原理

    Java核心技术讲解学习一 Java核心技术讲解学习二 Java核心技术讲解学习三 Java核心技术讲解学习四 J...

  • Java核心技术讲解六

    上次文章的简单的学习了虚拟机相关的知识。可以点击java核心技术讲解学习五这篇文章来说下简单的知识,也是我们经常用...

  • 浅谈Java内部类

    由于Java核心技术上的例子很不错,本篇内部类博客部分代码以Java核心技术上的例子进行讲解。 内部类总览 内部类...

  • Java基础知识干货

    这个是我个人阅读《Java核心技术》和《Java编程思想》总结出来的笔记,清晰明了,但是没有细致讲解,如果碰到疑惑...

  • 双11Java程序员书单推荐

    Java 《Java核心技术卷I》 《Java核心技术卷II》 《Java编程思想》 《Java并发编程实战》 《...

  • # [Java学习]1.Java基础【学习笔记】

    [Java学习]1.Java基础【学习笔记】 书籍 《Java核心技术》、《Java核心技术精讲》 2018-09...

  • Java核心知识

    Java核心语法 作者:springremember 书籍:《Java核心技术卷一》《Java核心技术卷二》 ja...

  • 记录一些书籍

    JAVA 基础 《Java核心技术·卷1:基础知识》《Java核心技术 卷2:高级特性》《Java8 实战》 并发...

  • 马士兵2020最新java面试99题java架构核心技术讲解20

    马士兵2020最新java面试99题java架构核心技术讲解2020BATJ大厂必备 P1马士兵:一道多线程面试题...

  • Java SE基础部分

    Java核心语法 书籍:《Java核心技术卷一》《Java核心技术卷二》 java包结构:核心包,Java1一同出...

网友评论

    本文标题:Java核心技术讲解六

    本文链接:https://www.haomeiwen.com/subject/reaqjftx.html