String与char的区别与联系
char 为基本数据类型,字符类型;
定义char类型变量时,必须使用单引号'',且只能有一个字符;
char占用2个字节,采用16位Unicode字符(即UTF16)编码,表示范围:0~65535;一个中文占据2个字节,所以char可存储一个汉字。
如下:
char c = 'c';
char c = '中';
// 自动类型提升,根据ASCII码表,自动向上转型为int类型
char x = 'x'+65415; //x 在ASCII编码表中十六进制编码为:120
char d = 'd'+65435; //d 在ASCII编码有中十六进制编码为:100
char d = 'd'+65436; //d Hex= 100 出现错误提示,100+65436=65536超出了char的能力表示范围
String 为引用数据类型,字符串类型;它是以 final 修饰的一个对象,所以不能被继承。定义String类型变量时,必须使用双引号""。
public String() {
this.offset = 0;
this.count = 0;
this.value = new char[0];
}
String类型可以与char[]进行相互转换。String底层也是基于char实现。它提供了构造函数 new String(char[]) 用于将char转换为String类型,toCharArray()方法用于将String转换为char[]类型。
char[] ch = {'a','b','c'};
String str = new String(ch);
System.out.print(ch);
// 输出:abc
char[] tc = str.toCharArray();
for(int i=0;i<tc.length;i++){
System.out.print("-"+tc[i]);
}
// 输出 -a-b-c
new String[]{}与String[] str={}的区别
String[] policyOrderStatus = new String[]{ "0", "1", "2" };
String[] policyOrderStatus = { "0", "1", "2" };
String[] str = new String[]{}与String[] str={} 区别:
第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。
第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"0", "1", "2",
如果没有,则将"0", "1", "2"存放进栈,并令str指向"0", "1", "2",如果已经有"0", "1", "2" 则直接令str指向"0", "1", "2"。
new String(bytes)与byte[].toString()的区别
String byt = "Convert byte Content";
byte[] bytes = byt.getBytes();
System.out.println("bytes: "+bytes);
System.out.println("bytes to String: "+bytes.toString());
String s = new String(bytes);
System.out.println("bytes to new String: "+s);
Java 中数组的 toString() 方法返回的并非数组内容,它返回的实际上是数组存储元素的类型以及数组在内存的位置的一个标识。new String(bytes) 返回的则是实际数组内容。
String、StringBuilder与StringBuffer的区别
String是不可变的类。String包括各种字段如长度,但在这些字段中的值不能改变。
StringBuilder 与 StringBuffer可变的,这两个类都继承了AbstractStringBuilder类。
AbstractStringBuilder实现原理:使用AbstractStringBuilder就是为了提高java中字符串连接的效率,如果直接使用+进行字符串连接,jvm会创建多个String对象,造成很大的性能开销。
AbstractStringBuilder中采用一个char数组来保存需要append的字符串,char数组有一个初始大小,当append的字符串长度超过当前char数组容量时,则对char数组进行动态扩展,即重新申请一段更大的内存空间,然后将当前char数组拷贝到新的位置;由于重新分配内存并拷贝的带来的空间开销比较大,所以每次重新申请内存空间都是采用申请大于当前需要的内存空间的方式,一般是2倍的大小。