Java 知识点 类,字符串

知识点哦

  • 实例变量和局部变量,名称什么的不重要,简单来说,一个是对象的,另一个是方法内部的;有两点需要注意,第一实例变量自动初始化,比如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+字符串长度;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值