zoukankan      html  css  js  c++  java
  • 常用类

    概述:

    一、基本数据类型包装类;

    二、字符串相关类;

            不可变字符序列:String

            可变字符序列:StringBuffer、StringBulider

    三、时间相关处理类:

             Date

             DateFormat、SimpleDateFormat

             Calender

    四、Math类

    五、枚举类

     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    一、基本数据类型的包装类

                   将基本数据类型封装到一个类中,包含属性和方法,方便对象操作,位于java.lang包中。

    使用:在使用过程中会涉及到自动装箱和自动拆箱

              装箱:将基本数据类型转换成包装类

              拆箱:将包装类转换成基本数据类型

    涉及的几个常见面试题:

              int、Integer、new Integer的比较    参考链接:https://blog.csdn.net/weixin_38405253/article/details/100099620

    区分几个概念:

                         1、Integer是int的包装类,int是一种基本数据类型;

                         2、int默认值是0,Integer默认值是null;

                         3、Integer必须实例化后才可以使用,int可以直接使用;

                         4、Integer是对象的引用,当new一个Integer时,实际上是成生一个指针指向此对象;而int则是直接存储数据;

    a、两个new Integer()比较,永远是false    因为new生成了两个新对象,内存地址不一样;

    b、Integer和new Integer()比较,永远是false         因为Integer指向的是java常量池中的对象,而new Integer()指向的是堆中新建的对象,所以两个内存地址不一样;

    c、两个Integer对象比较,如果是-128~127之间为true,否则为false     因为:

                  Integer i =100时,会被编译成 Integer i = Integer.valueof(100)   而java对Integer的valueof方法定义如下:

     1 private static class IntegerCache {
     2         static final int low = -128;  //最小
     3         static final int high;
     4         static final Integer cache[];
     5 
     6         static {
     7             // high value may be configured by property
     8             int h = 127;    //最大
     9             String integerCacheHighPropValue =
    10                 sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
    11 
    12 。。。。。。
    13 
    14 public static Integer valueOf(int i) {
    15         if (i >= IntegerCache.low && i <= IntegerCache.high)
    16             return IntegerCache.cache[i + (-IntegerCache.low)];
    17         return new Integer(i);
    18     }
    valueof

    d、int和Integer、new Integer()比较 ,只要值是相等的,结果就为true    因为Integer和new Integer()与int比较时,会自动拆箱为int,此时就是两个int变量做比较。

    Integer i =100;  ==>    int i = i.intValue();

    二、字符串相关类

                        jdk1.7之后 常量池 放置到 空间之中。

    字符串的使用:

             1、创建

                       String str = "abc";

                       String str2 = new String("abc");

                        两种方式都可以用,第一种更常用。

              2、字符串的本质

                       字符串的本质是字符数组或者叫做字符序列;

                        String类使用final修饰,不可以被继承;

                        使用equals方法比较的是字符数组的每一个位置的值;

                        使用substring方法时,需要注意是左闭右开区间    eg:String a="abcdefg" ;    s.substring(3,5);      ==>    de

    关于String的面试题:

              1、以下代码分别创建了几个对象?

               String a = "123";   首先会去常量池中找“123”,如果有则直接引用这个常量的内存地址,如果没有则创建一个,然后引用;所以至少创建0个对象,最多创建1个对象。

               String b = new String("345");    首先new的时候一定会在堆中创建一个对象,然后去常量池中查找是否有“345”这个常量,如果有则直接引用该常量的内存地址,否则先创建一个,然后引用;所以至少创建1个对象,最多创建2个对象。

              2、判断下面对象是否相等?

               String a = "abc";

               String a1 = new String("abc");

               String b = "def";

               String c = a+b;

               String d = "abc"+"def";

               String e = (a+b).intern();

               String f = a+"def";

               String g = getStr()+"def";

               public String getStr(){ return "abc";  }

               System.out.println(a==a1);

               System.out.println(c==d);

               System.out.println(c==e);

               System.out.println(c==f);

               System.out.println(c==g);

    答案:

    false

    true

    true

    false

    false

    结论:

          能明确知道其结果的为true;

          intern():先查看常量池中是否有该变量 ,如果有则直接引用;

          String d = "abc"+"def";  由于编译器优化,字节码文件反编译后会发现,会直接把"abc"+"def"优化成"abcdef";

               3、StringBuffer与StringBuilder为什么是可变字符串?

               都继承AbstractStringBuilder类,继承了父类的append方法,初始容量是16,若超过了会执行expandCapacity(int minimumCapacity)方法,扩大容量;接着走到getchars()方法中,

    System.arraycopy(value,srcBegin,dst,dstBegin,srsBegin-srcEnd); 其中

               value:要添加的字符串;

               srcBegin:指定的字符数组dst要在value的哪个位置插入;

               dst:要被插入的字符数组;

               dstBegin:字符数组的起始位置;

               srcEnd-srcBegin:value的长度。

               append方法其实是System.arraycopy()方法实现的。参考链接:https://www.cnblogs.com/NYfor2018/p/10353257.html

               4、String与StringBuffer和StringBuilder的区别?

                      String:不可变字符串;(用反射可以改变值)

                      StringBuffer:可变字符串,效率低,线程安全;

                      StringBulider:可变字符串,效率高,线程不安全;

    三、时间相关处理类:

                

     五、枚举类:

    对于什么情况下用枚举?

               对一些值固定不变,例如性别,不是女就是男,一个星期七天,或者web请求的返回状态,error为-1,success为0,未登录9......

    举例:

     1 package com.test.CommonClass;
     2 
     3 public enum StatusDemo {
     4     BreakFirst("milk"),Lunch("apple"),Supper("eggs");
     5     StatusDemo(String name){
     6         this.name = name;
     7     }
     8     private String name;
     9     public void show(){
    10         System.out.println(name);
    11 
    12         StatusDemo[] sd = StatusDemo.values();
    13         for (int i=0;i<sd.length;i++){
    14             System.out.println(sd[i].name);
    15         }
    16     }
    17 }
    StatusDemo
     1 package com.test.CommonClass;
     2 
     3 public class Test {
     4     public static void main(String[] args) {
     5         StatusDemo bf = StatusDemo.BreakFirst;
     6         bf.show();
     7         System.out.println("----------------");
     8         System.out.println(StatusDemo.Lunch.name());
     9     }
    10 }
    Test

    。。。。。。

    持续更新中

                

           

  • 相关阅读:
    jsp 页面获取当前路径
    html5 页面音频
    微信关于网页授权access_token和普通access_token的区别
    Texlive source
    vscode 快捷键
    vscode setting
    vscode extension 插件管理
    what
    linux manual
    java tool type
  • 原文地址:https://www.cnblogs.com/bentuzi/p/12638841.html
Copyright © 2011-2022 走看看