byte数组转为string

您所在的位置:网站首页 byte转成string byte数组转为string

byte数组转为string

#byte数组转为string| 来源: 网络整理| 查看: 265

基本类型 概念

java的基本数据类型可以简称为四类八种:

整型:(byte、short、int、long):整数数据类型默认是int浮点型:(float、double)字符型:(char)布尔类型:(boolean):true 真 和 false 假byte -> short -> char -> int -> long -> float ->double(小到大) 数据类型转换:

自动类型转换(自动),较小的类型转换为一个更大的类型byte -> short -> char -> int -> long -> float ->double强制类型转换(手动),更大的类型转换到一个较小的类型double -> float -> long -> int -> char -> short ->byte

数据类型对比一览表

2f52845f977e0398b7b941220814b74c.png 什么是包装类

Java是一种面向对象语言,很多地方都需要使用对象而不是基本数据类型。比如,在集合类中,我们是无法将int 、double等类型放进去的。因为集合的容器要求元素是Object类型。为了让基本类型也具有对象的特征,就出现了包装类型,它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

什么是自动拆箱和自动装箱 在Java SE5中,为了减少开发人员的工作,Java提供了自动拆箱与自动装箱功能。自动装箱: 就是将基本数据类型自动转换成对应的包装类。自动拆箱:就是将包装类自动转换成对应的基本数据类型。 那些场景会发生装箱与拆箱 将基本数据类型放入集合类包装类型和基本类型的大小比较包装类型的运算三目运算符的使用函数参数与返回值 String类 String的常用方法 indexOf():查询字符串首次出现的下标位置 lastIndexOf():查询字符串最后出现的下标位置 contains():查询字符串中是否包含另一个字符串 toLowerCase():把字符串全部转换成小写 toUpperCase():把字符串全部转换成大写 length():查询字符串的长度 trim():去掉字符串首尾空格 replace():替换字符串中的某些字符 split():把字符串分割并返回字符串数组 join():把字符串数组转为字符串 字符串替换删除 public static void main(String[] args) { String str = "hello word !!"; log.info("替换之前 :{}", str); //替换之前 :hello word !! str = str.replaceAll("l", "d"); log.info("替换所有字符 :{}", str); //替换所有字符 :heddo word !! str = str.replaceAll("d", "l"); log.info("替换全部 :{}", str); //替换全部 :hello worl !! str = str.replaceFirst("l", ""); log.info("替换第一个 l :{}", str); //替换第一个 l :helo worl !! } 字符串拆分合并 public static void main(String[] args) { String test =",a,b,"; System.out.println(Arrays.asList(test.split(",")) ); //[, a, b]默认拆分存在空值 System.out.println(Arrays.asList(StringUtils.split(test,","))); //[a, b] StringUtils处理拆分空值 String[] arrStr=new String[]{"a","b" ,null,"c"}; System.out.println(String.join("-", arrStr)); //a-b-null-c 拼接出现null值 System.out.println(StringUtils.join(arrStr, "-")); //a-b--c 拼接空 Joiner joiner = Joiner.on(",").skipNulls(); System.out.println(joiner.join(arrStr)); //a,b,c忽略拼接 } String的不变性

da5bd5a5225a10be0056d7ffdaed9803.png

5070516b8f83093b02ff4c62332e9af5.png

从代码上来看,str 的值好像被修改了,但从 debug 的日志来看,其实是 str 的实例ID已经被修改了,也就说 s =“world” 这个看似简单的赋值,其实已经把 str 的引用指向了新的 String实例,debug 的截图显示实例ID被修改。

从源码上查看一下:

public final class String implements java.io.Serializable, Comparable, CharSequence { // 用于存储字符串的值 private final char value[]; // 缓存字符串的 hash code private int hash; // Default to 0 // ......其他内容 }

使用 final 修饰的第一个好处是安全;第二个好处是高效,以 JVM 中的字符串常量池来举例,只有字符串是不可变时,我们才能实现字符串常量池,字符串常量池可以为我们缓存字符串,提高程序的运行效率。

String 和 常量池

String 常见的创建方式有两种,new String() 的方式和直接赋值的方式,直接赋值的方式会先去字符串常量池中查找是否已经有此值,如果有则把引用地址直接指向此值,否则会先在常量池中创建,然后再把引用指向此值;而 new String() 的方式一定会先在堆上创建一个字符串对象,然后再去常量池中查询此字符串的值是否已经存在,如果不存在会先在常量池中创建此字符串,然后把引用的值指向此字符串,如下代码所示:

String str1 = new String("Hello"); String str2 = str.intern(); String str3 = "Hello"; System.out.println(str1 == str2); // false System.out.println(str2 == str3); // true String 和 StringBuilder、StringBuffer 的区别

因为 String 类型是不可变的,所以在字符串拼接的时候如果使用 String 的话性能会很低,因此我们就需要使用另一个数据类型 StringBuffer,它提供了 append 和 insert 方法可用于字符串的拼接,它使用 synchronized 来保证线程安全,如下源码所示:

@Override public synchronized StringBuffer append(Object obj) { toStringCache = null; super.append(String.valueOf(obj)); return this; } @Override public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; }

因为它使用了 synchronized 来保证线程安全,所以性能不是很高,于是在Java提供了 StringBuilder,它同样提供了 append 和 insert 的拼接方法,但它没有使用 synchronized 来修饰,因此在性能上要优于 StringBuffer,所以在非并发操作的环境下可使用 StringBuilder 来进行字符串拼接。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3