精华内容
下载资源
问答
  • 基本类型概念java的基本数据类型可以简称为四类八种:整型:(byte、short、int、long):整数数据类型默认是int浮点型:(float、double)字符型:(char)布尔类型:(boolean):true 真 和 false 假byte ->...

    基本类型

    概念

    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 来进行字符串拼接。

    展开全文
  • byte[]数组转中文出现乱码问题描述解决方案 问题描述 调用三方接口进行SM4解密后的结果是一串byte数组,将这个数组当作new String()参数的时候传入,结果是中文乱码。 "address":"娴嬭瘯","onneFilServChnl":"app,APP...

    byte[]数组转中文出现乱码

    问题描述

    调用三方接口进行SM4解密后的结果是一串byte数组,将这个数组当作new String()参数的时候传入,结果是中文乱码。

    "address":"娴嬭瘯","onneFilServChnl":"app,APP,寰俊灏忕▼搴?","areaName":"鍖椾含甯?"
    

    解决方案

    new String的时候,将文字编码设置为utf-8

    String s = new String(byte数组,"UTF-8");
    

    结果为:

    "address":"测试","onneFilServChnl":"app,APP,微信小程序"
    
    展开全文
  • Java char数组转String问题

    千次阅读 2018-08-10 18:56:19
    Java char数组如果直接,不是单个字符单个字符的转会出现"a的问题,正常的字符串结尾都是"a"这样导致拼接失败,遍历数组后再去就能够解决问题。

    Java char数组如果直接转,不是单个字符单个字符的转会出现"a的问题,正常的字符串结尾都是"a"这样导致拼接失败,遍历数组后再去就能够解决问题。

    展开全文
  • 我就想着将byte[]数组转String,再将String转成byte[]数组应该行得通。可事实却打脸了,拿到的byte[]数组和原来的byte[]数组的地址不一致,这是因为乱码导致;在转换过程中加上"ISO-8859-1"字符编码可以解决乱...

    本来,我想将byte[]数组在feign中传输,因为封装的返回对象中没有数组类型的返回值,且是同事的代码,传输byte[]并不常用,就不想改同事封装的对象。我就想着将byte[]数组转成String,再将String转成byte[]数组应该行得通。可事实却打脸了,拿到的byte[]数组和原来的byte[]数组的地址不一致,这是因为乱码导致;在转换过程中加上"ISO-8859-1"字符编码可以解决乱码问题。

    先看两个例子。

    1.示例一:String装byte[],再将byte[]数组转成String

    String string = "String case to byte[]";

    byte[] bytes = string.getBytes();

    String newString = new String(bytes);

    输出的结果显示string、newString字符串的值是一致的,转换正确。

    2.示例二:byte[]数组转String,再将String转成byte[]

    byte[] bytes = {-28, -72, -83, -27, -101, -67};

    String string = new String(bytes);

    byte[] newBytes = string.getBytes();

    输出的byte[]字节数组的值为 {-28, -72, -83, -27, -101, -67}、newByte[]字节数组的值都为 {-28, -17, -65, -67, 2, -47},转换错误。

    使用"ISO-8859-1"编码

    byte[] bytes = {-28, -72, -83, -27, -101, -67};

    String string = new String(bytes, "ISO-8859-1");

    byte[] newBytes = string.getBytes("ISO-8859-1");

    输出的byte[]字节数组、newByte[]字节数组的值都为 {-28, -72, -83, -27, -101, -67}, 转换正确

    3.结论:

    分析两个示例,String能够互转和byte[]不能够互转的原因,因为编码的原因导致转换乱码或者错误。在两个示例中我都没有显示的指定转换数据的编码,其实内部默认指定的编码规则是"UTF-8"。因为"UTF-8"是可变长编码,在String转byte[]再将byte[]转String的时候String字符串的大小是确定,String字符串不会改变长度。byte[]转String,再将String转byte[]的时候,String字符串会变长,再转回原来的byte[]数组就发生错误了。在java中"ISO-8859-1"编码可以解决转码错误的问题,ISO-8859-1通常叫做Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中 0~127的字符与ASCII码相同,它是单字节的编码方式,这样第二种示例生成的String里的字节数组就跟原来的字节数组一样。

    展开全文
  • 解决java char数组输出乱码的问题发布时间:2020-08-18 10:08:33来源:亿速云阅读:159作者:小新小编给大家分享一下解决java char数组输出乱码的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下...
  • http://www.cnblogs.com/hy928302776/archive/2013/04/20/3032728.htmhttps://blog.csdn.net/vipclx/article/details/8029410在Java中,String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该...
  • 由于是业务的原因,有一个byte数组如下图所示,因为数据库用的是mysql,该字段是varchar类型,想把这个bytestring放入数据库,但是成字符串的时候出现乱码 ![图片说明]...
  • <p style="text-align:center"><img alt="" src="https://img-ask.csdnimg.cn/upload/1622446673963.jpeg" /></p>  </p>
  • byte[]转string乱码解决

    2021-06-22 16:26:43
    public static String byte2Hex(byte[] bytes){ StringBuffer stringBuffer = new StringBuffer(); String temp = null; for (int i=0;i<bytes.length;i++){ temp = Integer.toHexString(bytes.
  • char类型数组转换为String

    千次阅读 2020-12-23 20:11:05
    1.直接在构造String时建立。 char[] chars = {'a', 'b', 'c','d'}; String str = new String(data); 2.String有方法可以直接转换。 String.valueOf(char[] chr)就可以。 如: char[] chars = {'s','g','h'}; ...
  • @Launcher:public string EncMsg(string Msg, string Key, out string EncMsg){int iResult;EncMsg = "";StringBuilder sbEncMsg = new StringBuilder();byte[] ret = new byte[3];byte[] curMsg;int processedLen =...
  • 1. 加入这家公司一直跟通信层打交道 天天使用byte数组传递数据 好怀念 使用http协议 传数据 至少人家 okttp 或者retrofit帮你封装好了 现在 天天是十进制转换为16进制,byte 数组转换成short,int ,String 上面一篇是...
  • 很多人在Java编程时,总是喜欢用一下方法将数组转为字符串:(a为byte数组)  String s=a.toString(); 可是每次返回的时候,新手看来返回的结果是乱码,比如说我,写RSA算法时,没有注意,就以为是解密出来的乱码...
  • 关于Java乱码

    2021-03-06 05:21:00
    乱码本质:读取二进制时采用的编码与最初将字符成二进制时的编码不一致。编码(获得二进制数组的过程)时不抛出异常,数据就不会被破坏。Java关于乱码(MessyCode)问题Java使用的是Unicode编码;String str = "双引号...
  • Java 乱码问题

    2021-03-11 15:22:10
    在开发的时候,经常会碰到一个问题,本地无乱码而部署到服务器上后服务器出现了乱码,在此记录下我的解决方法:一直以来我都有一个误区,一直认为“字节无编码,字符串有编码”,而事实刚好相反,事实上是“字符串无...
  • java string乱码问题

    2021-02-26 12:04:02
    展开全部看了你的描述:转换后成'[C@1b8ee96'这个不是乱码,是Java的hashCode值,即对象的内存地址62616964757a686964616fe59b9ee7ad9431333335313861,产生原因是:Stringsql1="'"+id+"'";做字符串拼接时,id是一个...
  • java中使用string发生乱码怎么解决发布时间:2020-06-26 15:14:18来源:亿速云阅读:96作者:Leahjava中使用string发生乱码怎么解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解...
  • 解决 InputStream 转化 String 乱码问题

    千次阅读 2019-08-12 10:02:11
    import java.io.ByteArrayOutputStream; import java.io.InputStream; public class StreamTool { public static String toString(InputStream is) { try { ByteArrayOutputStream b...
  • Java byte[]字节数组转换为String字符串的注意事项 一、toString() 开始我想当然的使用toString()方法进行转换,结果如下: [B@1b67f74 乍一看就是“乱码”。其实这是hashcode编码,JDK源码如下:  ...
  • 更好的解决了String类型与byte类型的转换,防止出现乱码问题
  • 这是楼主实现upd连接时候的server代码,很显然我用到了字节数组转String,然后有趣的事情就发生了 它居然出现了。。。。。这么多的小方框,然后楼主查阅了很多资料发现,网上很少有人去关注这个问题。 然后强迫症...
  • Java-String-数据乱码

    千次阅读 2021-02-25 19:42:07
    /*** 前后端数据乱码问题* 解决办法1:* 乱码原因:一编一解码型不一致导致。* [main description]*@param{[type]} String[] args [description]*@return{[type]} [description]*/public static voidmain(String[] ...
  • 引入:在学习javaWeb时,碰到需要将字节数组String类型做相互转换的,如使用Base64编码时。那么,我们知道String其实提供了API:getBytes() 将字符串转换为字节数组,而通过构造器new String(byte[]) 又可以将字节...
  • 字节数组转字符串(Java

    万次阅读 2020-09-10 16:48:49
    字节数组转字符串(Java) 我们在开发中经常会遇到将字节数组转换成字符串的情况,这里提供一个简单的方法即可实现。 使用String构造方法转换: String res = new String(bytes, "UTF-8") 注意:第二个参数代表了...
  • 通过流获取到 char[] ; 将char[] 转换为String;这个过程中怎么指定其编码格式呢。
  • java中的byte[] 与 String 转换,是遍历byte[] 把每个byte元素数值转化为char 在放到String的char数组里,例如byte[0] = 115 对应的char字符为 ‘s’ 。 如果都是这样的话,看起来直接用String方法进行转换就行。 ...
  • 不用担心Java有解决方案,您可以使用ByteArrayInputStream以Java将字节数组转换为InputStream 。 此类使用字节数组作为源,并且由于它是InputStream的子类,因此您可以轻松地将其传递给任何接受InputStream作为参数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,220
精华内容 15,688
关键字:

java数组转string乱码

java 订阅
友情链接: print-module.rar