12月28日java SE基础

位运算的含义?位运算就是直接对整数在内存中的二进制位进行操作。将数值转换为2进制,然后再进行与&,或|,非!,异或^运算

与有一个0结果就是0,或有一个1结果即为1,非就是0变1,1变0,异或有一个0一个1才为真

与案例                     
00101                     
11100
(&;或者and)
----------------
00100

或案例
00101
11100
(|或者or)
----------------
11101

异或案例
00101
11100
(^或者xor)
----------------
11001

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

左移<<与右移符号>>

左移符号规律N进制,左移动M位,右侧补0,相当于变成原数乘以2^M次方

>>右移符号,规律N进制,右移动M位,左侧补符号位,相当于变成原数除以2^M次方
编程语言进行乘法运算内部都是进行位运算,所以运算结果很快
>>>右移,左侧补0

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

运算符优先级见课本p44,注意有括号的情况

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

字符串String,属于引用数据类型

字符串内部核心是char数组,但两者不是同一个内容

String类的substring方法可以从一个较大的字符串提取出一个子串

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

数组为什么需要提前申请足够大的空间?

因为如果不提前申请空间,不知道该数组的长度是多少,编辑该数组可能会对内存中其他数组产生影响,防止它越界

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

不可变字符串指的是要修改字符串内容,不会在源地址内容进行修改,而是需要新开辟一段内存空间,更改字符串变量的指向,指向新开辟的内存空间的地址,新开辟的内存空间内容就是修改后的内容。

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

面试点!常量池

String字符串每次使用可能会有重复的内容,常量池保存大量的字符串,将各种字符串存放在公共的常量池中,字符串变量指向常量池中相应的位置,常量池定期检查没有使用过的字符,定期删除

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

==的使用?

如果比较的是基本数据类型,比较的是值

如果比较的是一你用数据类型,比较的是地址

equals比较的是值,使用方法a.equals(b)     a和b是变量

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

String a = null和String b = " " 两者有区别

前者是没地址没内容 后者是空数组符号

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

char编码值  码点值就是编码值,每个字母或者汉字有一个编码值

int a = str.length()获取长度.length方法需要记住

char a  = str.chatAt(n) 获取下标位n的那个字符

int a = str.codePointAt(n) 获取下标为n的编码值

int[] arr = str.codePonint().toArray 获取所有编码值,将编码值保存到数组

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

String ApI

String转大小写 case意思是转换

.toUpperCase()为转字母为大写

.toLowerCase()为转字母为小写

String replace(CharSequence oldString,CharSequence newString)返回一个新字符串。这个字符串用newString代替原始字符串所有的oldString.可以用String 或StringBuilder对象作为CharSquence参数

String切割  String[] arr = a4.split("下") //用于切割字符串,用数组来接收

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

面试题

字符串拼接

StringBuilder实现原理

页的4kb分类是按照变量来分,buffer内部基本类型数组实现,buffer代表高性能,原先的String不可变,是因为内容多大就申请多大的内存空间,修改需要重新申请,buffer先申请足够大的空间,这样如果修改字符串,可以在原地址进行修改,不会超过操作系统的一个页,节省了空间

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

12/28日代码

public class Test2{
    public static void main(String[] args){
         /* int a = 9;   //转换位2进制1001
          int b = 23; //转换为2进制10111
          int c = a << 2; //结果就是10进制9转换成2进制,数值左移两位  
          int d = c >> 2;
          int f = a & c;
          int g = a | c;
          //int h  =123 * 234 = 234 * (64+32+16+8+2+1) = 234 << 6 + 234 <<5+ 234 //<<4+234<<3+234 <<1 +234         
          System.out.println(c);
    //    -------------------------------------------------------------------------
         */

      /*左移如果超范围就会错误
         int  a = 56; //24个0 +00111000
         int b = a << 26; // 111000 + 26个0
         System.out.println(b);
     */
       
        /*------------------------------------
        String a = "大家好,宏伟最帅";
        System.out.println(a);
        char[] arr = {'大','家','好','清','霄','最','帅'};
        for(int i = 0;i<arr.length;i++){
              System.out.print(arr[i]);

        }
         ---------------------------------------
            */       

         /*   //String 类的 substring 方法
           String a = "宋宇30岁的时候有资产100个亿,房子10套";
           String b = a.substring(4,9); //获取的是[4,6)这几个字符
           System.out.println(b);
           ---------------------------------------------------
          */

       
        /*
          //字符串的拼接
          String a = "嘿嘿";
          String b = "开课";
          String c = a + b + "大记号" + "===" +a + a + "哈哈哈哈";
          System.out.println(c);
           --------------------------------------------------            
         */
         
      /*   //字符串判断相等equals的使用
        String a = "嘿嘿";
        String b = "嘿嘿";
        String c = new String("嘿嘿");//在常量池中开辟新的内存空间
        String d = new String("嘿嘿");
        System.out.println(d==c); //比较的是地址
        System.out.println(d.equals(c));//比较的是值
        --------------------------------------------------
      */
    
      /*char a = '帅';//char编码值
      int b = a ;
      System.out.println(b);
       -----------------------------------------------
        */
       
      /*String str1 = "大家都很帅,特别是宋宇最帅";
      int a = str1.length(); //获取长度.length方法需要记住
      char b = str1.charAt(3); //获取下标为3的那个字符
      int c = str1.codePointAt(6);  //获取下标为6的编码值
      System.out.println(a);   //a的长度就是代码单元
      System.out.println(b); 
      System.out.println(c); 
      int[] arr = str1.codePoints().toArray();  //获取所有编码值,将编码值保存到数组中
      for(int i = 0;i < arr.length;i++){
          System.out.println(arr[i]);       
      }
     -------------------------------------------------------
      */

    
     /* String bb = "abc";
      String cc = bb.toUpperCase();
      System.out.println(cc);
      System.out.println(cc.toLowerCase() );
      */
    
    /*  String a1 = "哈哈哈";
      boolean b1 = a1.equalsIgnoreCase("哈哈");
      System.out.println(b1);

     String a2 = "大家";
     boolean b2 = a2.startsWith("大");//判断开头的字符串是否相等
     String a3 = "a3很好";
     boolean b3 = a3.endsWith("很好"); //判断结尾的字符串是否一样
     System.out.println(b2);
     System.out.println(b3);

     String a4 = "大家下午好";
     String b4 = a4.replace("下午好","都很好看");  //替换其中的一些字符串
     System.out.println(b4);

     int a5 = a4.codePointAt(3);  //返回从给定位置的码点
     System.out.println(a5);  
    
     int a6 = a4.offsetByCodePoints(2,1);  //返回从2码点开始,位移1后的码点的索引
     System.out.println(a6);  
    
     String a7 = "好";
     int b7 = a4.compareTo(a7);  //判断两个字符串的顺序  按照字典顺序,
//如果字符串位于other 之前, 返回一个负数;
//如果字符串位于 other 之后,返回一个正数;如果两个字符串相等,返回 0。
     System.out.println(b7);
      
     int a8 = a4.codePointCount(0,5);//返回 startlndex 和 endludex-l之间的代码点数量。
     System.out.println(a8);
   
     String[] arr = a4.split("下");
     for(int  i = 0;i < arr.length;i++){
     System.out.println(arr[i]);  
       }
     ------------------------------------------------------------- 
     */
       
     long start = System.currentTimeMillis();
     String str = "";
     StringBuilder  str1 = new StringBuilder();
     for(int i = 0; i < 100000;i++ ){
         //str +=i;
         str1.append(""+i);
     }
      long end = System.currentTimeMillis();
      System.out.println("花费毫秒数: " +(end - start));
     
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值