java怎么储存输入的字符串 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)& 注解 & 反射+注解的案例

java怎么储存输入的字符串 java中怎样输入字符串_JVM_02

创建对象的4种方法总结

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

java怎么储存输入的字符串 java中怎样输入字符串_程序人生_03

垃圾回收GC

java怎么储存输入的字符串 java中怎样输入字符串_java_04

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

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

JVM调优,Arthas使用

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

java怎么储存输入的字符串 java中怎样输入字符串_职场和发展_05

java怎么储存输入的字符串 java中怎样输入字符串_java怎么储存输入的字符串_06

java怎么储存输入的字符串 java中怎样输入字符串_java_07

认识多线程

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

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

java怎么储存输入的字符串 java中怎样输入字符串_职场和发展_08

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

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

java怎么储存输入的字符串 java中怎样输入字符串_java_09

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

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

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


总结

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