1. << 和 >>
<<: 2<<3 ,2的三次方
>>: 2>>3, 2的 1/3次方
2.string类是否可以被继承
不可以 被final修饰:线程安全;支持字符串常量池数据共享,节省资源,提高效率(将常量放入常量池,如果存在则直接取出,否则创建放入)
3.Java 操作字符串的类
1)String : 字符串不可变;可用concat(),+,join()拼接;每一次操作都会产生新的字符串
2)StringBuffer: 字符串可变;可用append()拼接;线程安全
3)StringBuilder: 字符串可变;可用append()拼接;线程不安全
4. String s="i" 和String a=new String("i")是否一样
前者 往常量池放入"i",引用指向常量池
后者 两个对象,一个在常量池,一个用new创建在堆上的对象
5.如何将字符串反转
1)递归法
public static String reverse1(String str) { int length=str.length(); if(length<=1){ return str; } String left=str.substring(0,length/2); String right=str.substring(length/2,length); return reverse1(right)+reverse1(left); }
2)利用 .charAt(i) 字符串拼接
public static String reverse2(String str){ int length=str.length(); String reverse=""; for (int i=0;i<length;i++){ reverse=str.charAt(i)+reverse; } return reverse; }
3)StringBuffer 中的reverse()
public static String reverse3(String str){ return new StringBuffer(str).reverse().toString(); }
4)toCharArray() 首位反转
public static String reverse4(String str){ char[] s=str.toCharArray(); int n=s.length-1; for (int i=0;i<n/2;i++){ char t=s[i]; s[i]=s[n-i]; s[n-i]=t; } return new String(s); }
5)toCharArray() 拼接
public static String reverse4(String str){ char[] s=str.toCharArray(); String reverse="";for (int i=0;i<length;i++){ reverse=s[i]+reverse; } return reverse; }
6.将 GB2312 编码的字符串转换为 ISO-8859-1 编码的字符串?
String s1 = "你好"; String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1"); //将 GB2312 编码的字符串转换为 ISO-8859-1 编码
7.两个对象值相同(x.equals(y)==true),但却可有不同的 hashcode,对吗?
不对 如果两个对象 x 和 y 满足 x.equals(y) == true,它们的哈希码(hash code)应当相同。
Java 对于 eqauls 方法和hashCode 方法是这样规定的:
1)如果两个对象相同(equals 方法返回 true),那么它们的 hashCode 值一定要相同;
2) 如果两个对象的 hashCode 相同,它们并不一定相同。