java 基本数据类型及数组使用集锦

博客: 安卓之家
微博: 追风917
CSDN: 蒋朋的家
简书: 追风917

每日一景

Arrays.copyOf与System.arrayCopy


数组拷贝,有Arrays.copyOf与System.arrayCopy,区别是System.arraycopy要求你必须提供一个目标数组,而Arrays.copyOf不用你提提供目标数组,其内部实现就是用的 System.arrayCopy

另外,这个Arrays类有很多实用方法,比如Arrays.toString(int[] ints),可以直接把数组转成字符串,参数是8种基本数据类型数组和Object数组

自动装箱和拆箱


jdk1.5 新增加的技能,自动装箱允许我们将基本类型和装箱基本类型(Boxed Primitive Type)混用,按需自动装箱和拆箱

它们之间性能是有明显的差别的(基本类型更优),所以优先使用基本数据类型——第2章-创建和销毁对象

volatile不能保证原子性而Atomic可以


volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的(也就是上面说的A) ,但是不能用其来进行多线程同步控制

AtomicInteger 是用原子方式更新的int值。主要用于在高并发环境下的高效程序处理。使用非阻塞算法来实现并发控制。

Java多线程深度探索
为什么volatile不能保证原子性而Atomic可以?

字节数组和ascii字符串的转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* ascii字符串转成字节数组: "123" --> {0x31, 0x32, 0x33}
* @param str
* @return
*/

public static byte[] getBytes(String str) {
try {
return str.getBytes("US-ASCII");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}

/**
* 字节数组转成 ascii 字符串: {0x31, 0x32, 0x33} --> "123"
* @param aBuf
* @return
*/

public static String getString(byte[] aBuf) {
StringBuilder sb = new StringBuilder();
char[] chars = new char[aBuf.length];

for (int i = 0; i < chars.length; i++) {
chars[i] = (char) aBuf[i];
}
sb.append(chars);
return sb.toString();
}

byte 数据和二进制字符串的转换

需求是这样的,有个字节数据 0x23(16进制), 获取该数据的每一位的值,也就是转化为二进制的字符串

我们都知道,java虚拟机中,byte 占 8 位数据, 0x23 也就是相当于二进制的数据 0010 0011

那么如何输出这个数据呢,方法有这么几种:

  1. Integer.toBinaryString()
    这个可以直接转化为二进制数据,但是前面是去除0的,也就是会输出:10 0011

  2. 转化为字节数组,用 byte 保存每一位数据

    1
    2
    3
    4
    5
    6
    7
    8
    public static byte[] byteToByteArray(byte b) {
    byte[] array = new byte[8];
    for (int i = 7; i >= 0; i--) {
    array[i] = (byte) (b & 1);
    b = (byte) (b >> 1);
    }
    return array;
    }
  3. 移位运算

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /** 
    * 把byte转为字符串的bit
    */

    public static String byteToBit(byte b) {
    return ""
    + (byte) ((b >> 7) & 0x1) + (byte) ((b >> 6) & 0x1)
    + (byte) ((b >> 5) & 0x1) + (byte) ((b >> 4) & 0x1)
    + (byte) ((b >> 3) & 0x1) + (byte) ((b >> 2) & 0x1)
    + (byte) ((b >> 1) & 0x1) + (byte) ((b >> 0) & 0x1);
    }

二进制字符串转化为字节数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static byte binaryStringToByte(String byteStr) {  
int re, len;
if (null == byteStr) {
return 0;
}
len = byteStr.length();
if (len != 4 && len != 8) {
return 0;
}
if (len == 8) {// 8 bit处理
if (byteStr.charAt(0) == '0') {// 正数
re = Integer.parseInt(byteStr, 2);
} else {// 负数
re = Integer.parseInt(byteStr, 2) - 256;
}
} else {// 4 bit处理
re = Integer.parseInt(byteStr, 2);
}
return (byte) re;
}

安卓开源库收集整理中,欢迎 PR, star,地址:https://github.com/XXApple/AndroidLibs

分享是一种美德,更是一种生活方式!!

也许你会说我是一个梦想者,但我不是唯一的一个。

悦分享,越快乐^_^

欢迎交流,转载请注明出处,谢谢!

文章目錄
  1. 1. Arrays.copyOf与System.arrayCopy
  2. 2. 自动装箱和拆箱
  3. 3. volatile不能保证原子性而Atomic可以
  4. 4. 字节数组和ascii字符串的转换
  5. 5. byte 数据和二进制字符串的转换
,
Fork me on GitHub