码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 程序人生——Java中字符串使用的建议


    在这里插入图片描述

    目录

    • 引出
    • 字符串
      • 建议52:推荐使用String直接量赋值
        • 建议53:注意方法中传递的参数要求
      • 建议54:正确使用String、StringBuffer、StringBuilder
        • 建议55:注意字符串的位置
      • 建议56:自由选择字符串拼接方式
        • 建议57:推荐在复杂字符串操作中使用正则表达式
      • 建议58:强烈建议使用UTF编码
        • 建议59:对字符串排序持一种宽容的心态
    • 深入认识JVM
      • JVM内存分配,类加载
      • 创建对象的4种方法总结
      • 垃圾回收GC
      • JVM调优,Arthas使用
    • 认识多线程
      • 创建多线程方法+了解线程池
      • 多线程下-1非原子性问题即解决
      • 再论线程,创建、生命周期
    • 总结

    引出

    程序人生——Java中字符串使用的建议


    字符串

    建议52:推荐使用String直接量赋值

    • 一般对象都是通过new关键字生成,String还有第二种生成方式,即直接声明方式,如String str = “a”;String中极力推荐使用直接声明的方式,不建议使用new String(“a”)的方式赋值。**原因:直接声明方式:**创建一个字符串对象时,首先检查字符串常量池中是否有字面值相等的字符串,如果有,则不再创建,直接返回池中引用,若没有则创建,然后放到池中,并返回新建对象的引用。**使用new String()方式:**直接声明一个String对象是不检查字符串常量池的,也不会吧对象放到池中。String的intern方法会检查当前的对象在对象池中是否有字面值相同的引用对象,有则返回池中对象,没有则放置到对象池中,并返回当前对象

    建议53:注意方法中传递的参数要求

    • replaceAll方法传递的第一个参数是正则表达式

    建议54:正确使用String、StringBuffer、StringBuilder

    • String使用“+”进行字符串连接,之前连接之后会产生一个新的对象,所以会不断的创建新对象,优化之后与StringBuilder和StringBuffer采用同样的append方法进行连接,但是每一次字符串拼接都会调用一次toString方法,所以会很耗时。StringBuffer与StringBuilder基本相同,只是一个字符数组的在扩容而已,都是可变字符序列,不同点是:StringBuffer是线程安全的,StringBuilder是线程不安全的

    建议55:注意字符串的位置

    • 在“+”表达式中,String字符串具有最高优先级)(Java对加号“+”的处理机制:在使用加号进行计算的表达式中,只要遇到String字符串,则所有的数据都会转换为String类型进行拼接,如果是原始数据,则直接拼接,如果是对象,则调用toString方法的返回值然后拼接

    建议56:自由选择字符串拼接方式

    • 字符串拼接有三种方法:加号、concat方法及StringBuilder(或StringBuffer)的append方法。字符串拼接性能中,StringBuilder的append方法最快,concat方法次之,加号最慢。

    原因:

    • 1、“+”方法拼接字符串:虽然编译器对字符串的加号做了优化,使用StringBuidler的append方法进行追加,但是与纯粹使用StringBuilder的append方法不同:一是每次循环都会创建一个StringBuilder对象,二是每次执行完都要调用toString方法将其准换为字符串—toString方法最耗时;
    • 2、concat方法拼接字符串:就是一个数组拷贝,但是每次的concat操作都会新创建一个String对象,这就是concat速度慢下来的真正原因;
    • 3、append方法拼接字符串:StringBuidler的append方法直接由父类AbstractStringBuilder实现,整个append方法都在做字符数组处理,没有新建任何对象,所以速度快

    建议57:推荐在复杂字符串操作中使用正则表达式

    • 正则表达式是恶魔,威力强大,但难以控制

    建议58:强烈建议使用UTF编码

    • 一个系统使用统一的编码

    建议59:对字符串排序持一种宽容的心态

    • 如果排序不是一个关键算法,使用Collator类即可。主要针对于中文

    深入认识JVM

    JVM内存分配,类加载

    Java进阶(1)——JVM的内存分配 & 反射Class类的类对象 & 创建对象的几种方式 & 类加载(何时进入内存JVM)& 注解 & 反射+注解的案例

    在这里插入图片描述

    创建对象的4种方法总结

    Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化

    在这里插入图片描述

    垃圾回收GC

    在这里插入图片描述

    Java进阶(垃圾回收GC)——理论篇:JVM内存模型 & 垃圾回收定位清除算法 & JVM中的垃圾回收器

    简介:本篇博客介绍JVM的内存模型,对比了1.7和1.8的内存模型的变化;介绍了垃圾回收的语言发展;阐述了定位垃圾的方法,引用计数法和可达性分析发以及垃圾清除算法;然后介绍了Java中的垃圾回收器,由串行、到并行再到并发,最后到G1的演变;最后给出了垃圾回收器的对比和使用指引。

    JVM调优,Arthas使用

    • Java进阶(JVM调优)——阿里云的Arthas的使用 & 安装和使用 & 死锁查找案例,重新加载案例,慢调用分析
    • Java进阶(JVM调优)——JVM调优参数 & JDK自带工具使用 & 内存溢出和死锁问题案例 & GC垃圾回收

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    认识多线程

    创建多线程方法+了解线程池

    Java进阶(5)——创建多线程的方法extends Thread和implements Runnable的对比 & 线程池及常用的线程池

    在这里插入图片描述

    多线程下-1非原子性问题即解决

    Java进阶(6)——抢购问题中的数据不安全(非原子性问题)& Java中的synchronize和ReentrantLock锁使用 & 死锁及其产生的条件

    在这里插入图片描述

    再论线程,创建、生命周期

    Java进阶(再论线程)——线程的4种创建方式 & 线程的生命周期 & 线程的3大特性 & 集合中的线程安全问题

    主要内容:
    1.线程创建的方式,继承Thread类,实现Runable接口,实现Callable接口,采用线程池;
    2.线程生命周期: join():运行结束再下一个, yield():暂时让出cpu的使用权,deamon():守护线程,最后结束,sleep():如果有锁,不会让出;
    3.线程3大特性,原子性,可见性,有序性;
    4.list集合中线程安全问题,hash算法问题;


    总结

    程序人生——Java中字符串使用的建议

  • 相关阅读:
    前端时间分片渲染
    【LeetCode】矩阵模拟相关题目汇总
    Android插件化学习之初识类加载机制
    熵基科技深交所上市:市值82亿 应收账款账面价值近3亿
    (十六)Alian 的 Spring Cloud Eureka 集群配置(主机名方式)
    超快速成,零基础掌握C#开发中最重要的概念
    机械转行网络安全自学经历,零基础学网络安全,血泪总结的干货
    个人简历补充
    【隐私计算】SIRNN: A Math Library for Secure RNN Inference
    springboot高校学生宿舍水电费报修考勤管理系统
  • 原文地址:https://blog.csdn.net/Pireley/article/details/136676697
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号