Java 知识点 类,字符串

来源:互联网 发布:歼31和f35对比数据 编辑:程序博客网 时间:2024/06/06 14:19

知识点哦

  • 实例变量和局部变量,名称什么的不重要,简单来说,一个是对象的,另一个是方法内部的;有两点需要注意,第一实例变量自动初始化,比如int初始化0,但是局部变量量不会进行初始化;还有就是局部变量是可以屏蔽实例变量的;
    static String b = "lalalla";    static     {        System.out.println(b);   //这里就是类变量        String b="buyaoa";       //这里是局部变量 不会报错的    }

代码可以清楚地看出,局部变量确实会屏蔽掉全局的(实例变量或者类变量),这也就是说为啥要写this的原因;

  • Java中不定参数调用
    这个原来确实没用过
 public  static void  main(String []arg)    {        Test("a","b","c","d");    }  static   public  void  Test(String... vlaue)    {        for (int i = 0; i < vlaue.length; i++) {            System.out.println(vlaue[i]);        }    }
  • java中的字符串
    1. 关于字符串的理解:参考
      首先存在三个区,分别是栈,字符串常量区,堆;
      这里写图片描述
      String str1=”abc”;
      String str2=”abc”;
      String str3=”abc”;
      String str4=new String(“abc”);
      String str5=new String(“abc”);
      首先对于str1这种的是直接找字符串常量区,如果存在abc,就直接引用,如果没有就造一个,和堆没有关系;以new创建的,肯定会在堆中有对象,那么为什么会指向字符串常量区呢,因为每次都搞一个新的对象,还搞一个新的字符串很消耗空间的啊;所以字符串会找字符串常量区,如果没有,就在常量区新建一个,然后再在堆中new一个对象;
    2. 类似于下面的代码
        String str1="a";        String str2 = str1+"b";        String str3 = "ab";        System.out.println(str2 == str3); //输出false

简单地说 String str3 = “ab”; 这样的代码编译时就可以确定,但是String str2 = str1+”b”;在编译器无法确定,所以就直接在堆上分配了;
3. equals的步骤,先是==判断对象引用是不是一样,一样直接返回true,不是的的话,用instanceof检查对象类型是不是一样(包括子类);然后就是一个一个字符比较;
4. compareTo,两个字符串如果位数不同,就输出长度差,如果相同,就输出第一个不一样字符之间的差值
5. 字符串自动类型转换

        int a = 5;        int b = 3;        String s = "l";        System.out.println(a+s+b);  //513        System.out.println(a+b+s);  //81  先做a+b,然后再转型

简单地说,先做相同的,再转型
6. StringBuffer与StringBuilder
这俩没啥区别,StringBuffer除了线程同步以外,值得注意的是这俩并没有重写equals函数,所以只能是同引用才可以相等了;

        StringBuffer s =  new StringBuffer("aba");        StringBuffer s1 = new StringBuffer("aba");        StringBuilder s2 = new StringBuilder("ccc");        StringBuilder s3 = new StringBuilder("ccc");        System.out.println(s.equals(s1));        System.out.println(s2.equals(s3));

默认缓存 16+字符串长度;

0 0