Java 基础知识(二)

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 相同,它们并不一定相同。

8.数组中类存如何分配
   数组使用前必须初始化
   1)静态初始化:指定数组元素初始值,系统决定其长度;
   2)动态初始化:指定数组长度,系统分配初始值;
   注意:数组系统初始值指定为null;int型指定为0
9.面向对象的特征
  继承、封装、多态
10.Overload和Override
  1)重载(overload):编译时的多态;同一个类中,方法名相同,但参数个数或类型不同
  2)重写(override):运行时的多态;子类与父类(接口实现),子类被重写的方法与父类中同样方法的返回类型一致
     
原文地址:https://www.cnblogs.com/dxjx/p/12447526.html