java常见的类型转换

1.基本数据类型与字符串之间的互转

1.1基本类型转换成String(以int为例)
eg:int类型转换成String类型.
1.int类型+"";
2.Integer.toString(int num)
    //基本类型的封装类调用toString()方法,传入的参数为int类型.
3.static String valueOf(int i) --- 返回 int 参数的字符串表示形式。
    //通过String类中的valueOf(任意类型)方法,将任意类型参数转换成String类型的字符串.
    String s = String.valueOf(3);
    System.out.println(s);
1.2String转换成基本类型(以int为例)
//方法一:
static int  parseInt(String s) --- 将字符串参数作为有符号的十进制整数进行解析。
    String s = "1232123"; 
    int parseInt = Integer.parseInt(s);
    System.out.println(parseInt);

//方法二       
static Integer  valueOf(int i) --- 返回一个表示指定的 int 值的 Integer 实例。
    int intValue() --- 以 int 类型返回该 Integer 的值。
    int intValue = Integer.valueOf(s).intValue();
    System.out.println(intValue);

2.数组与字符串之间的互转

2.2数组转换成String(代码实现在下边几行)
1,Arrays工具类中的toString(参数:数组)方法.
2,遍历数组添加到创建的StringBuffer中,再直接打印成字符串.
2.2String转换成数组(代码实现在下边几行)
1,String中的toCharArray()方法;
2,String中的charAt()方法,再通过遍历添加到创建的字符数组中.
import java.util.Arrays;

public class Change {
    public static void main(String[] args) {
        //数组--->字符串.
        char[] chArr = {'1','2','a','3','b'};

        //方法一
        //通过调用Arrays工具类中的toString(参数:数组)方法.
        //Arrays工具类的toString(参数:数组)源代码
        //底层是通过创建StringBuider类来实现的,为了区分是数组类变成String类,所以两边添加了[].
        String s1 = Arrays.toString(chArr);
        System.out.println(s1);
        //System.out.println(chArr.toString());//不能直接调用toString方法,因为没有重写打印出来的是地址值.

        //方法二
        //先用String类中charAt()方法获取每个索引位置字符子串,再通过遍历挨个添加到创建的StringBuffer中.源码底层是StringBuild实现的,是线程不安全的.
        StringBuffer sb = new StringBuffer();
        for (char c : chArr) {
            sb.append(c);
        }
        //StringBuffer的toString方法已经重写了,所以直接可以打印即为字符串.
        System.out.println(sb);
        //System.out.println(sb.toString());//效果一样的.
        //System.out.println(sb+"");//这也是其他类转换成字符串类的一种方式.

        //Arrays工具类toString实现的源码.
        //      public static String toString(char[] a) {
        //          if (a == null)
        //              return "null";
        //          int iMax = a.length - 1;
        //          if (iMax == -1)
        //              return "[]";
        //
        //          StringBuilder b = new StringBuilder();
        //          b.append('[');
        //          for (int i = 0; ; i++) {
        //              b.append(a[i]);
        //              if (i == iMax)
        //                  return b.append(']').toString();
        //              b.append(", ");
        //          }
        //      }
    }
}
2.3String和byte之间的特殊转换
String转换成Byte[]数组
String s = "abc";
byte[] b = s.getBytes();

for (int i = 0; i < b.length; i++) {
    System.out.println(b[i]);//97//98//99
}

Byte[]数组转换成字符串,用字符串的构造方法.
byte[] b1 = {97,98,99};
String s1 = new String(b1);
System.out.println(s1);//abc

3.集合与数组之间的互转

3.1集合转换成数组
1,Object[]  toArray() ---返回包含此 collection 中所有元素的数组。
通过集合实现类的对象调用toArray()方法,返回一个Object类型的数组.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class CollectionDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("c");
        list.add("z");
        list.add("a");
        list.add("w");

        Object[] arr = list.toArray();
        System.out.println(Arrays.toString(arr));//用数组工具类中的toString方法获取字符串

        for (int i = 0; i < arr.length; i++) {//也可以通过遍历得到元素
            System.out.println(arr[i]);
        }
2,<T> T[] ---toArray(T[] a) 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

        //定义好集合要转换的数组类型,通过传入新创建的数组类型,这里定义数组长度为0.
        String[] array = list.toArray(new String[0]);//list.size()
        //这里边涉及到两个长度问题//1,集合的长度//2,设定的数组的长度//两个长度比一比,谁长听谁的,不足null补齐.
        //如何理解呢?就是集合转成数组,数组可以提前定义好长度,或者集合默认长度list.size();
        //转换的时候,哪个长度长就以哪个为准.而元素未添加满的,用null补齐.
        for (String string : array) {
            System.out.println(string);
        }
3.2数组转换成集合
1,static<T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表。
通过数组工具类中的asList()方法

//导包
public class CollectionDemo {
    public static void main(String[] args) {
        //首先这样的做法是错误的,因为数组可以存储基本数据类型和引用数据类型,而集合只能存储引用数据类型,
        //这里虽然不报错,是因为把int[](int类型的数组)当成了泛型进行存储.
        int[] arr1 = { 11, 22, 33 };
        List<int[]> as1 = Arrays.asList(arr1);
        System.out.println(as1.size());//1//存储的是一个数组,所以长度只有1
        System.out.println(as1);//[[I@7852e922]

        System.out.println("--------------------------");

        //Arrays的asList()方法,返回一个受指定数组支持的固定大小的列表。
        //因为数组和集合最大的区别就是集合的长度是不固定的,把固定类型的数组转换成集合,那么使集合的长度也"变得"固定了,因此无法使用集合中的set(增)和remove(删)方法.因为转换后的集合长度被数组固定住了.
        Integer[] arr2 = { 11, 22, 33 };
        List<Integer> as2 = Arrays.asList(arr2);
        System.out.println(as2);//[11, 22, 33]
        //迭代过程正常
        Iterator<Integer> it2 = as2.iterator();
        while (it2.hasNext()) {
            System.out.println(it2.next());
        }
        //要想把上边转换而来固定长度的集合进行增删,可以通过再创建(复制)成新的集合进行增删操作.
        ArrayList<Integer> list2 = new ArrayList<>(as2);
        list2.add(100);
        System.out.println(list2);//[11, 22, 33, 100]

        System.out.println("--------------------------");

        //String本身是引用数据类型,可以当做集合的元素进行存储.
        String[] s = { "a", "b", "c" };
        List<String> ass = Arrays.asList(s);
        System.out.println(ass);//[a, b, c]

        System.out.println("--------------------------");

        //static <T> List<T>   asList(T... a) //这里的(T... a)是1.5新特性,是可变参数 
        List<String> str = Arrays.asList("a","b","c");//传入可变参数
        System.out.println(str);//[a, b, c]
    }
}
2,通过遍历数据添加到创建的集合中.

4.其他各种转换总结(开发中经常用到的转换方法)

4.1任意类型转成字符串类型
1,任意类型 + ""
2,引用数据类型toString()方法
3,String.valueOf(参数);参数传递任意类型,返回值是String
4.2字符串转成字节数组:
String s = "abc";
byte[] bytes = s.getBytes();//在IO流的时候用到--- 字节流往外写一个字符串的时候
4.3字节数组转字符串:
byte [] bys = {97,98,99};
String s = new String(bys);
System.out.println(s);
4.4字符串转成字符数组:
String s = "abc";
char[] ch = s.toCharArray();//返回值ch是每一个字符组成的数组 [a,b,c]
得到字符串的每一个字符还可以通过charAt()方法遍历得到
4.5字符串转成基本数据类型://以int类型为例
String s = "123";
int ps = Integer.parseInt(s);
4.6字符串转成StringBuffer:
1,构造函数
    String s = "abc";
    StringBuffer sb = new StringBuffer(s);//在要用到StringBuffer里面的方法的时候使用,比如反转,比如添加
2,通过append()方法
    String s = "abc";
    StringBuffer sb = new StringBuffer();
    sb.append(s);
4.7StringBuffer转成字符串:
1,任意类型 + ""
2,引用数据类型toString()方法
3,String.valueOf(参数);参数传递任意类型,返回值是String
4,构造        
    StringBuffer sb = new StringBuffer("abc");
    String s = new String(sb);//s就是转换后的结果
5,subString
    StringBuffer sb = new StringBuffer("abc");
    String s = sb.subString(0,sb.length());//s就是转换后的结果
4.8基本数据类型与其包装类之间的手动转换:
int ---> Integer(手动装箱)
    int i = 10;
    Integer ii = new Integer(i);//其中ii就是手动包装后的引用数据类型对象

Integer ---> int(手动拆箱)
    Integer i = new Integer(10);
    int iv = i.intValue();//iv就是由Integer转换成int得到的值
4.9毫秒值转成日期对象
1,先有一个毫秒值Long类型的d
2,转换
    Date date = new Date(d);
    或者
    Date date = new Date();
    date.setTime(d);
//两种方法中的date就是将毫秒值转换成的日期对象
4.10日期对象转换成毫秒值
1,先有一个 Date 类型的时间对象
2,直接通过getTime的方法获取毫秒值
4.11将日期对象转换成字符串
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s = sdf.format(new Date());//传递时间对象,返回格式化后的字符串
4.12将字符串转换成字符串日期对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d = sdf.parse("2000年10月10日 10:10:10");//传递时间对象,返回格式化后的字符串