Java语法:变量 ,数据类型,类型转换 ,运算符

变量:在程序的执行过程中,其值可以发生改变的量叫变量。
    定义变量的格式:
        1、数据类型 变量名 = 初始化值;
        2、数据类型 变量名;
          变量名 = 初始化值;

必须对其限定数据类型,要有变量名,要给他赋值,初始化值。

定义变量的注意事项

1.作用域:变量在同一个大括号有效,出了大括号无效。

2.相同的作用域不能定义两个同名变量。

3.没有初始化值不能直接使用,在使用时赋值即可

定义变量的格式

   1.数据类型  变量名 = 初始化值;

   2.数据类型  变量名

      变量名 = 初始化值;

public class Cherries{
    static int a = 10;

    public static void main(String[] args) {
        System.out.println(a);

        int b = 20;
//        int b = 30;

        //仅仅定义了一个int类型的变量c,但是没有给值
        int c;
        c = 200;
        System.out.println(c);

        int a, b1, c1;
        a = 10;
        b1 = 20;
        c1 = 30;
        System.out.println(a);
        System.out.println(b1);
        System.out.println(c1);

数据类型:
    A:基本数据类型
        byte    1个字节  -2^7~2^7-1
        short   2个字节
        int     4个字节
        long    8个字节
        float   4个字节
        double  8个字节
        char    2个字节
        boolean 1个字节

1、 +一般情况下,做加法运算。
2、 boolean类型的变量不能赋值给其他数据类型
3、默认转换
         byte,short,char—int—long—float—double
         byte,short,char相互之间补转换,他们参与运算首先转换为int类型
4、强制类型转换的格式:
     目标数据类型 目标变量名 = (目标数据类型)要进行赋值变量
     不建议大量使用强制类型转换,因为可能会损失精度。
public class Cherries {
    public static void main(String[] args) {
//        int a = 10;
//        int b = 20;
//        int c = a + b;
//        System.out.println(c);
//
//        boolean flag = true;
//        a = flag;

        byte b1 = 3;
        int a = 4;

        //自动类型转换
//        a = b;
//        b = a;

//        int i = 10;
//        long l = i;

        //强制类型转换
//        byte b1 = a;
        byte b1 = (byte) a;
        System.out.println(a);
 面试题
      byte b1=3,b2=4,b;
      b=b1+b2;
      b=3+4;
      哪句是编译失败的呢?为什么呢?

变量相加和常量相加不一样:
  1、变量相加首先会提升数据类型,然后再相加赋值,如果接收的数据类型范围小于计算结果后的数据类型范围,报错,不能赋值
  2、常量相加,会先进行计算,计算完后看看在不在接收的数据类型范围内,如果在,直接赋值,如果不在,报错。
public class Cherries {
    public static void main(String[] args) {
//        int a = 3;
//        byte b = 4;
//        int c1 = a + b;
//
//        byte c2 = (byte)(a + b);
//        System.out.println(c2);

        byte b1=3,b2=4,b;
//        b=b1+b2;
        b=(byte)(b1+b2);
        b=3+4;

    }
}
byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
    有问题的,因为byte数据类型的范围是在-128~127之间,而130超出了范围。
public class Cherries {
    public static void main(String[] args) {
//        byte b = 130;

        byte b = (byte)130;
        System.out.println(b);  // -126
        b = (byte)131;
        System.out.println(b);

        byte b1 = (byte)300;
        System.out.println(b1); // 44
    }
}

我们知道数据在计算机中运算时是采用补码的方式进行参数运算的,所以要知道130的补码。而想要知道补码,就得知道反码,原码。所以得求出130的二进制表示。

130的二进制:10000010

由于默认是int类型,所以扩大字节

130的源码为00000000 00000000 00000000 10000010

又由于最高位是0,所以原码,反码,补码都一样

130的补码00000000 00000000 00000000 10000010

做截取操作10000010

这是补码:10000010

已知补码,求原码:
       符号位   数值位
补码:    1     0000010
反码:    1     0000001
原码:    1     1111110

最终结果为:11111110
将它换算成十进制就是我们看到的结果:-126

+的运算:

1.当+两边都是字符或者字符串的时候,这时+号做的是加法运算。

2.当+两边其中是字符串的时候,+做的是字符串的拼接,拼接后组成一个新的字符串。

3.字符串与任何数值做加法,做的是字符串的拼接,拼接完成后组成一个新的字符串。

public class Cherries {
    public static void main(String[] args) {
        System.out.println("hello"+'a'+1); // helloa1
        System.out.println('a'+1+"hello"); // 98hello
        System.out.println("5+5="+5+5); // 5+5=55
        System.out.println(5+5+"=5+5"); // 10=5+5

        //System.out.println("5+5="+5+5); // 5+5=55 我就想先计算后面的5+5怎么办?
        //小括号可以改变运算的顺序优先级
        System.out.println("5+5="+(5+5));
    }
}

++:自加1

当++在前的时候,先自加1,在做赋值操作,当++在后的时候,先做赋值操作,在自加1。

--:自减1

当--在前的时候,先自减1,在做赋值操作,当--在后的时候,先做赋值操作,在自减1。

public class Cherries {
    public static void main(String[] args) {
//        int a = 10;
//        int c = a--;
//        System.out.println(a); //9
//        System.out.println(c); //10
//
//        int a1 = 10;
//        int c1 = --a1;
//        System.out.println(a1); //9
//        System.out.println(c1); //9


        int a = 10;
        int c = a++;
        System.out.println(a); //11
        System.out.println(c); //10

        int a1 = 10;
        int c1 = ++a1;
        System.out.println(a1); //11
        System.out.println(c1); //11

    }
}

运算符:
    算术运算符:+,-,*,/,%
    赋值运算符:=,+=,-=,*=,/=,%=
    比较运算符:==,>,<,>=,<=,!=
    逻辑运算符:&,|,^,!,&&,||
    位运算符:&,|,^,~,<<,>>,>>>
    三目运算符:(关系表达式)?表达式1:表达式2;

算数运算符

运算:对常量和变量的操作过程称之为运算。

运算符:对常量和变量进行操作的符号称之为运算符。

表达式:用运算符把常量或者变量连接起来的符号,并且符合java语法的式子就可称之为表达式。

操作数:参与运算的数据。

算术运算符:+,-,*,/,%

public class Cherries {
    public static void main(String[] args) {
        //+ 加法运算
        System.out.println(1+1);

        //-减法运算
        System.out.println(5-2);

        //* 乘法运算
        System.out.println(2*2);

        //  / 整除运算,只获取整数部分
        System.out.println(5/2);
        // 我就想获取小数怎么办?将其中的某一个数的数据类型变成double
        System.out.println((5*1.0)/2); // 2.5

        // %  取余运算
        // 5/2=2 .... 1
        System.out.println(5%2);

    }
}

比较运算符:== ,!= ,>, <, >= ,<=

注意事项:

1.关系运算符表达式的结果是一个boolean类型,结果要么是ture,要么是false。

2.等于号不能少写,=是数值运算符,==才是关系运算符。

3.赋值的时候要注意类型问题,关系运算符的表达式是boolean类型,所以结果只能是boolean类型的变量接受。

public class Cherries {
    public static void main(String[] args) {
        int a = 3;
        int b = 9;
        boolean flag = (a == b);
//        int flag2 = (a == b);
        System.out.println(flag);

        //!=
        System.out.println(a != b);

        //>
        System.out.println(a>b);

        //<
        System.out.println(a<b);

        //>=
        a = 4;
        System.out.println(a>=b);

        //<=
        System.out.println(a<=b);

        System.out.println(a==b);
        System.out.println(a=b);
    }
}

  逻辑运算符:&,|,^,!,&&,||

逻辑运算符两边是一个boolean值,运算是一个。

&:两边只要有一个为false,结果就为false

|:两边只要有一个为ture,结果就为ture

^:两边一样为ture,两边不一样为false

!:将ture变为false,false变为tture。

public class Cherries {
    public static void main(String[] args) {
//        int a = 3;
//        int b = 4;
//        System.out.println(a&b);

        int a = 3;
        int b = 4;

        // &
//        System.out.println((a++ == 3) & (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) & (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 3) & (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) & (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);


        // |
//        System.out.println((a++ == 3) | (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) | (b++ == 4)); //左边是false,右边是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 3) | (b++ == 5)); //左边是true,右边是false,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) | (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);

        // ^
//        System.out.println((a++ == 3) ^ (b++ == 4)); //左边true,右边也是true,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) ^ (b++ == 4)); //左边是false,右边是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 3) ^ (b++ == 5)); //左边是true,右边是false,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) ^ (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);

        // !
        System.out.println(!((a++ == 4) ^ (b++ == 5)));


    }
}
 
&&: 短路与,结果和单个与结果一样,有false则false,但是执行的东西不一样,
    当&&左边的表达式结果为false的时候,结果是false,右边不执行
||: 短路或,结果和单个或结果一样,有true则true,但是执行的东西不一样,
    当||左边是true的时候,右边不执行,结果是true.

逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6
public class Cherries {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;

        // &
//        System.out.println((a++ == 3) & (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) & (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 3) & (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); // 4,5
//        System.out.println((a++ == 4) & (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //

        System.out.println("====================================================================");
        a = 3;
        b = 4;
        // &&
//        System.out.println((a++ == 3) && (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) && (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //a:4,b:4
//        System.out.println((a++ == 3) && (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) && (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //a:4,b:4
        System.out.println("====================================================================");
        a = 3;
        b = 4;
        // |
        System.out.println((a++ == 3) | (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
        System.out.println("a:" + a + ",b:" + b);
        System.out.println((a++ == 4) | (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
        System.out.println("a:" + a + ",b:" + b); //a:4,b:4
        System.out.println((a++ == 3) | (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
        System.out.println("a:" + a + ",b:" + b);
        System.out.println((a++ == 4) | (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
        System.out.println("a:" + a + ",b:" + b); //a:4,b:4
        System.out.println("====================================================================");
        a = 3;
        b = 4;
        // ||
//        System.out.println((a++ == 3) || (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //a:4,b:4
//        System.out.println((a++ == 4) || (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //a:4,b:5
//        System.out.println((a++ == 3) || (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //a:4,b:4
//        System.out.println((a++ == 4) || (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //a:4,b:5

        //java不支持连续比较
//        System.out.println(20>a>10);
        System.out.println((a<20 & a>10));

    }
}

位运算符:&,|,^,~,<<,>>,>>>

public class Cherries {
    public static void main(String[] args) {
        byte a = 3;
        byte b = 4;
        System.out.println(a&b);
        System.out.println(a|b);
        System.out.println(a^b);
        System.out.println(~a); //-4
    }
}
/*
        由于数据在计算机中参与运算的都是补码,而想要知道补码,就得知道反码,原码,就得求出二进制
        3的二进制:00000011
        4的二进制:00000100
        又由于3和4都是正数
        3的补码:00000011
        4的补码:00000100

        & 运算:有0则0
            00000011
         &
            00000100
        ---------------
            00000000

        结果是 : 0

        ====================================

        | 运算:有1则1
            00000011
         |
            00000100
        --------------
            00000111

        结果是:7

        ====================================

        ^ 运算:相同则0,不同则1
            00000011
         ^
            00000100
        --------------
            00000111

        结果是:7

        ====================================

        ~ 运算:1变成0,0变成1
            00000011
        ~
        -------------
        补码:     11111100
        已知补码求原码:
        反码:     11111011
        原码:     10000100

        结果是:-4
位运算符:
<<: 左移,二进制左移,右边用0补齐,多出来的丢弃
>>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
>>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。
public class Cherris {
    public static void main(String[] args) {
        System.out.println(3<<2); //12 = 3*4 = 3*2^2
        System.out.println(24>>2); //6 = 24/(2*2)
        System.out.println(-24>>2);// -6
        System.out.println(-24>>>2);//1073741818

        System.out.println(3<<3); // 3*2^3


        //请用最有效率的方式写出计算2乘以8的结果
//        System.out.println(2*8);
        System.out.println(2<<3);
    }
}

/*
       <<: 左移,二进制左移,右边用0补齐
       3的二进制:00000000 00000000 00000000 00000011
       由于3是正数,所以原码,反码,补码都一样
       3的补码:00000000 00000000 00000000 00000011
       左移:
            00000000 00000000 00000000 00000011
        (00)00000000 00000000 00000000 00001100   (补码)
      由于最高位是0,既是补码也是原码,所以结果是:  12

      ================================================================
      >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
      24的二进制:00000000 00000000 00000000 00011000
      由于24是正数,所以原码,反码,补码都一样
      24的补码:00000000 00000000 00000000 00011000
      右移:
              00000000 00000000 00000000 00011000
              0000000000 00000000 00000000 000110(00)  (补码)
      由于最高位是0,既是补码也是原码,所以结果是:6

      ================================================================
      >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
      -24的二进制:10000000 00000000 00000000 00011000
      已知原码求补码:
        原码:10000000 00000000 00000000 00011000
        反码:11111111 11111111 11111111 11100111
        补码:11111111 11111111 11111111 11101000
      右移:
            11111111 11111111 11111111 11101000
            1111111111 11111111 11111111 111010(00)  (补码)
      已知补码求原码:
        补码:11111111 11111111 11111111 11111010
        反码:11111111 11111111 11111111 11111001
        原码:10000000 00000000 00000000 00000110
        最终结果是:-6

        ==============================================================
        >>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。
        -24的二进制:10000000 00000000 00000000 00011000
      已知原码求补码:
        原码:10000000 00000000 00000000 00011000
        反码:11111111 11111111 11111111 11100111
        补码:11111111 11111111 11111111 11101000
        无符号右移2位:
             11111111 11111111 11111111 11101000
             0011111111 11111111 11111111 111010(00)   (补码)
        由于最高位是0,所以它的原码,反码,补码都是一样的。
        最终结果位:0011111111 11111111 11111111 111010 = 1073741818

三目运算符:(关系表达式)?表达式1:表达式2;

三目运算符又称之为三元运算符

格式:(关系表达式)?表达式1:表达式2

如果关系表达式的结果为ture,运算后的结果是表达式1

如果关系表达式的结果为false,运算后的结果是表达式2

注意事项:

1.三目运算符表达式的结果数据类型由三目运算符表达式1和表达式2中最大数据类型决定的。

2.关系表达式一定只能是boolean类型

public class Cherries {
    public static void main(String[] args) {
        //求出a,b中的最大值
        int a = 10;
        int b = 30;
        //三目运算符解决
        int c = (a>b)?a:b;

        //面试题:int a = 20;double b = 30.0;(a>b)?a:b
        int a1 = 20;
        double b1 = 30.0;
        double c1 = (a1>b1)?a1:b1;
        System.out.println(c1);


    }
}
public class Cherries {
    public static void main(String[] args) {
//        三个当中提取体重最大的一个,首先定义三个变量

        int weight1 = 180;
        int weight2 = 200;
        int weight3 = 150;
//用三元运算符比较前两个,并用临时变量保存起来
        int tempwight=weight1>weight2?weight1:weight2;
//用三元运算符获取临时变量,再和第三个进行比较,获取最大变量
        int maxweight=tempwight>weight3?tempwight:weight3;
        System.out.println("maxweight"+maxweight);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值