7月15号JavaSE学习笔记

目录

运算符      

位运算符   即二进制运算符

        按位与运算 &

        按位或运算 |

        按位异或运算 ^

         反码运算~

扩展:两正数交换值问题

移位运算                

  <<  向左移位运算

>> 向右移位运算

>>> 向右移位运算

优先级  

& |  也可用对布尔值进行运算得到布尔值

&与&&区别(|与||同理)

赋值运算符  =  +=  -=  /=  *=  %=  &=

三元运算符  A?B:C  

流程控制

if语句

switch语句

while

do...while

for

流程控制语句

        break;结束所在循环体

        continue

数组  

扩展:Arrays类功能

定义: 

数组限定

数组的各种使用方法:

 数组不可越界   下标越界运行会报错

        

二维数组

定义和初始化

使用方法

限定要求

浅谈相关面试题


运算符
      

        扩展:一、二、三元运算符,即分别需要1、2、3个操作数的运算符

位运算符   即二进制运算符

        移位运算符是最基本的运算符之一,几乎每种编程语言都包含这一运算符。移位操作中,被操作的数据被视为二进制数,移位就是将其向左或向右移动若干位的运算。移位运算符只作用于整形变量,分为两类,第一类是 long 类型,long 类型长度为 8 字节 64 位;第二类为 int 类,int 长度为 4 字节 32 位,short、byte、char 在做移位之前会自动转换为 int 型因此与 int 规则一致, 在做完移位运算后,short、byte、char类型都将变成 int 型数据(转换过程中需要考虑高位丢失的问题)

        按位与运算 &


                将A和B转成二进制  右侧对其上下比较,两者都为1则结果为1,否则为0,最后将结果转为十进制
        int result =12 & 3;


        按位或运算 |


                将A和B转成二进制  右侧对其上下比较,两者有一个为1则结果为1,否则为0,最后将结果转为十进制
        result=12|11;


        按位异或运算 ^


                //将A和B转成二进制  右侧对其上下比较,两者不同则为1,相同则为0,最后将结果转为十进制
        result=12^11;
      

         反码运算~

                 //将所有二进制数值中的0换成1,1换成0
                result=~11;//-12
               
 

扩展:两正数交换值问题


        //加法运算交换值
        int a=11,b=22;
        a=a+b;//a=33 b=22
        b=a-b;//a=33 b=11
        a=a-b;//a=22 b=11
        
        //异或运算交换整数值
        a=11;
        b=22;
        a=a^b;//a=29 b=22
        b=a^b;//a=29 b=11
        a=a^b;//a=22 b=11
        
      
        


移位运算
        
        

        个人总结:逻辑移位运算(虽然表面说符号位不移动,但本质符号位移动,只不过中间0(负数是1)多,中间0舍去完了就溢出了变成负数了如00011111左移3位),十进制解释就是byte最大值是127,左移一位扩大两倍无法保存切割后变负数,数据溢出
              

  <<  向左移位运算

        正负数都自动补0
        result=-5<<2;// -20 向左移动2位,即扩大4倍,移动一位扩大2倍

        对正数进行左移:所有位左移,即 <<,可能会变成负数
        byte p=127;
        //(p<<1)返回值是int,但强转位byte后切割成一个负数了
        //(p<<1)=254
        p=(byte)(p<<1);//p=-2


        
      

>> 向右移位运算

        移动补符号位,正补0负补1
        result=-1>>2;//向右移动2位
        
        

>>> 向右移位运算

        无论正负数移动补0
        result=-1>>>1;//向右移动补0
 


优先级  

        & > | > && > ||

& |  也可用对布尔值进行运算得到布尔值


        boolean bool=true&false;//&和&&结果一样但过程绝对不一样

        a=12;b=12;
        bool=a++<12 & b++>12;//都要运算  a:13  b:13
        

&与&&区别(|与||同理)

1.&&是逻辑操作符,而& 既是位运算符又是逻辑运算符
        2.&是按位与运算符,用于对两个条件进行逻辑与操作,
        3.而&&是逻辑与运算符,在条件语句中只有在第一个条件为true时才会继续执行第二个条件,如果第一个条件为false,则不会继续判断第二个条件。
        4.&&具有短路功能,而&不具有短路功能

赋值运算符  =  +=  -=  /=  *=  %=  &=

+= 操作符会进行隐式自动类型转换,此处 a += b 隐式地将加操作的结果类型强制转换为持有结果的类型,而 a = a + b 则不会自动进行类型转换。

byte a = 1;
byte b = 2; 
b = a + b;         //报编译错误,不兼容的类型: 从 int 转换到 byte 可能会有精度损失
b += a;            //ok
int c=1;
b+=c;

        byte ab=12;
        ab+=2;
        ab=(byte)(ab+2);
        ab-=2;
        ab*=2;
        ab/=2;

三元运算符  A?B:C  

        A是条件 布尔类型     B:C都是值  true取B  false取C

        result=(int) (12>34?11.1:33);//double到int要强转  结果为33虽然不是11.1但总体也要强转


流程控制

if语句

        设置if语句时考虑执行顺序,避免效率低下
        //低效率
        int age=100;
        if(age>=60&&age<70) {
            
        }else if(age>=70&&age<80) {
            
        }else {
            
        }
        //高效率
        if(age>=80) {
            
        }else if(age>=70&&age<80) {
            
        }else if(age>=60&&age<70) {
            
        }else {
            
        }

switch语句

        //switch case  匹配某一个变量的值是什么,匹配到某一个case项,就从这个case项运行到break或者代码块结束
        //所有的case项都没有匹配成功才会执行default
        //case项和defual的顺序可以是错乱的
        //switch可以匹配的类型且只能是 byte short int char String(Java7新增) Enum 

        int num=8;

        switch(num) {
        
            default:
                System.out.println("无");
            case 1://匹配后顺序执行达到并列效果
            case 7://进入
                System.out.println("春");
                break;//退出
            case 2:
                System.out.println("夏");
                break;
            case 3:
                System.out.println("秋");
                break;
            case 4:
                System.out.println("冬");
                break;
                

运行结果:无 加 春  解释:最终匹配default然后穿透运行到break结束

while

        while  先判断再去做
        适合不明确多少次的情况
        while(继续循环的条件) {
            循环体
        };
        例:int n=0;
        while(n<4) {
            System.out.println((char)('a'+n));
            n++;
        }

do...while

        do...while  先做再循环    至少执行一次
         do{
             循环体
         }while(继续循环的条件);


        例如:int i=1;
        do {
            System.out.println(i);
        }while(i!=1);

for

        for循环适合明确多少次的情况
        计数器;条件;自增或自减
        for(;;) {
        }

        例:for(i=0;i<10;i++) {
            System.out.println(i+1);
        }

流程控制语句

        break;结束所在循环体

                //break跳出多重循环
                boolean bool=true;//2.加锁对象
                one:for(;;) {//1.第一个for循环叫one
                    for(;bool;) {
                        for(int bb=0;bb<100;bb++) {
                            if(bb==50) {
                                bool=false;
                                break one;//跳出第一个循环,嵌套循环结束
                            }
                        }
                    }
                }

        continue

                跳过本次循环进行下一次循环

       

死循环  无结束循环条件  while(true){}  控制台运行报错
无限循环  永远达不到循环结束的条件int a=1;while(a<1000){a--;}  可以编写其他代码

        


数组  

        有序的元素序列

扩展:Arrays类功能

        给数组赋值:通过fill方法
        对数组排序:通过sort方法,按升序
        比较数组:通过equals方法比较数组中元素值是否相等。
        查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
        Arrays.fill(a,2,4,0);//就是将a数组中从2到4的位置填充为0。会将原来的覆盖掉。

定义: 

        int[] arr;

        int arr[];//效果相同但非首选

三种初始化方法:

        int[] arr= {1,2,3};
        int[] arr3=new int[] {1,2,3};
        int[] arr2=new int[4];

数组限定

        1.只能存放指定类型的数据
        2.数组的长度不可变

        3.其元素必须是相同类型,不允许出现混合类型

数组的各种使用方法:

        //使用数组中的元素   下标   从0开始依次增加
        System.out.println(arr[2]);//从0开始第三个

        打印数组
        System.out.println(Arrays.toString(arr));
        //打印第一个元素的地址
        System.out.println(arr);
        //获取数组长度
        System.out.println(arr.length);

        //遍历数组
        for(int a:arr) 
            System.out.println(a);

 数组不可越界   下标越界运行会报错

         arr=new int[4];
        //arr[4]=0;//运行会报错 
        //Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
        //at com.easy.EasyE.main(EasyE.java:46)


        

二维数组

定义和初始化

        int[][] arrs=new int[4][2];

         int[][] arrs=new int[4][];//并没有问题

使用方法

        //赋值
        arrs[0][1]=12;
        //打印
        System.out.println(Arrays.deepToString(arrs));
        //遍历
        for(int i=0;i<arrs.length;i++) {
            for(int j=0;j<arrs[i].length;j++) {
                
            }
        }

限定要求

        一维数组的个数不可变 但一维数组引用的地址可变

       int[][] arrs=new int[4][2];
       //换成指向一个长度为4的数组地址
       arrs[2]= new int[]{1,2,3,4,5};


浅谈相关面试题

Java 基础面试题——运算符_java运算符面试题-CSDN博客

n*8怎么计算最快

n<<3;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值