Java中的变量详解、数据类型及转换、运算符、Scanner类

变量详解、数据类型及转换、运算符、Scanner

变量

  • 变量型的数据在计算机中的存储原理——按照二进制进行存储
  • 计算机表示数据的最小单元:一个字节(byte,简称B,是使用8个二进制位组成的)
二进制、八进制、十进制、十六进制
  • 二进制:0B||0b开头
int a1 = 0B01100001;
System.out.println(a1);
  • 八进制:0开头
  int a2 = 0141;
  //1->001,4->100,1->001;141->001100001
  //但1字节由八个(二进制)位构成,故001100001->01100001->97   
  System.out.println(a2);
  • 十六进制:0X或0x开头
   int a3 = 0XFA;
   //F(15)->1111,A(10)->1010;FA->11111010
   //1byte = 8bit,故11111010->250
   System.out.println(a3);

数据类型

基本数据类型
数据类型种类具体数据类型字节数数据范围(不需要记住具体的数值)
整型byte(字节型)1B-128~127
整型short(短整型)2B-3w+~3w
整型int(整型)默认4B-2e9~2e9
整型long(长整型)8B19位数
浮点型float(单精度)4B
浮点型double(双精度)默认8B
字符型char2B0~6w+
布尔型boolean1Btrue || false
引用数据类型(以后再详讲)
  • String字符串类型

​ String userName = “Achooyo”;

/**
 * 数据类型:基本数据类型(4大类8种) && 引用数据类型
 */
public class VariableDemo2 {
    public static void main(String[] args) {
        //TODO 基本数据类型(4大类8种)
        //1.整型:byte,short,int,long
        byte b = 127;
        // byte b1 = 128;//越界

        short s = 13244;

        int i =422566;//整型字面量默认是int类型的。

        /*符合long的取值范围
        但由于整型字面量默认是int类型的,此处越界int型,故报错
        long lg = 9876543210;*/
        //如果希望随便写一个整型字面量默认是long类型的,需要在后面加上L/l
        long lg1 = 9876543210L;

        //2.浮点型:float,double
        //注意:随便写浮点型字面量,默认是double,如果希望浮点型为float,后面加上F/f
        float f = 3.14F;
        double d = 114.514;

        //3.字符型:char 0 - 60000+ 取值范围全是正数
        char ch1 = 'a';
        char ch2 = '中';
        char ch3 = ' ';
        //char ch4 = ''; 不能为空

        //4.布尔型:boolean (true || false)
        boolean flag1 = true;
        boolean flag2 = false;

        //TODO 引用数据类型
        String name = "张三";
        System.out.println(name);
    }
}

类型转换

  • 不同类型变量,互相存在赋值转换的问题
1.自动类型转换
  • 自动类型转换:类型范围小的变量,可以直接赋值给类型范围大的变量(小字节转换成大字节)
/**
 * 基本数据类型的的类型自动转换机制
 */
public class TypeConversionDemo1 {
    public static void main(String[] args) {
        //自动类型转换:类型范围小的变量,可以直接赋值给类型范围大的变量(小字节转换成大字节)
        byte a = 12;//00001100
        int b = a;//00000000 00000000 00000000 00001100
        System.out.println(a);

        int i = 100;
        double d = i;
        System.out.println(d);


       /*
        char 取值 0 - 60000+ 全为正数
        而byte short 存在负数,固不可与char进行转换
        char c = 55;
        short s = c;
        byte b1 = 2;
        c = b1;*/
    }
}

2.表达式的自动类型转换
  • 表达式中的最终结果类型是由里面最高的数据类型决定的,最高数据类型是什么,最终结果的数据类型就是什么

  • 注意事项

    1.表达式的最终结果由表达式的最高类型决定

    2.在表达式中,byte,short,char是直接转换成int类型参与计算

/**
 * 表达式的自动类型转换机制
 */
public class TypeConversionDemo2 {
    public static void main(String[] args) {

        byte a = 10;
        int b = 20;
        long c = 30;
        long rs = a + b + c;
        System.out.println(rs);

        double rs2 = a + b + 1.0;
        System.out.println(rs2);

        byte i = 10;
        short j = 30;
        /* TODO 注意:在表达式中,byte、short、char是直接转换成int类型参与运算的
        short rs3 = i + j;  报错:需要提供short,但实际提供int*/
        int rs3 = i + j;
        System.out.println(rs3);

        //TODO 面试笔试题:
        byte b1 = 10;
        byte b2 = 30;
      /* TODO 注意:在表达式中,byte、short、char是直接转换成int类型参与运算的
        报错:需要提供byte,但实际提供int
        byte b3 = b1 + b2;*/
        int b3 = b1 + b2;

//        b1 = b1 + 10; 一式报错,byte接收int;
//        b1 += 10; but二式自加不报错,因为扩展赋值运算符 += 隐含强制类型转换转成byte
//          即 b1 += 10; <--> b1 = (byte)(b1 + 10);
        // todo 此处可看operator包中OperatorDemo3 笔记
        System.out.println("b1 = " + b1);
    }
}

3.强制类型转换
  • 大范围类型的变量不可以直接赋值给小范围变量,如果一定要赋值,必须进行强制类型转换。
  • 注意
    1.强制类型转换可能造成数据(丢失)溢出;
    2. 浮点型转成整型,直接丢掉小数部分,保留整数部分返回
/**
 *  强制类型转换
 */
public class TypeConversionDemo3 {
    public static void main(String[] args) {
        //强制类型转换:强行将类型范围大的变量的数据赋值给类型范围小的变量,后果自己负责噢
        int a = 20;//00000000 00000000 00000000 00010100
        byte b = (byte) a;//                    00010100
        byte b1 = (byte)(a+1000);
        byte b2 = (byte) a;//alt + enter 强制类型转换
        System.out.println(b);

        int i = 1500;//00000000 00000000 00000101 11011100
        byte j = (byte)i;//                       11011100 其中第一个1代表负数
        System.out.println(j);

        double d = 99.5;
        int m = (int) d;
        System.out.println(m);

        //TODO 注意:
        // 1. 强制类型转换可能造成数据(丢失)溢出;
        // 2. 浮点型转成整型,直接丢掉小数部分,保留整数部分返回
    }
}

运算符

1.算术运算符、+ 作连接符
  • 算术运算符:+、-、*、/、%

  • “+” 符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串
    技巧:从左往右,能算则算,不能算则连在一起

/**
 * 掌握基本的算术运算符的使用 && 掌握使用 + 符号作连接符的情况
 */
public class OperatorDemo1 {
    public static void main(String[] args) {
        //TODO 目标1:掌握基本的算术运算符的使用
        int a = 10;
        int b = 2;
        System.out.println(5/2);//表达式最终结果为int 故2.5 -> 2 直接舍弃小数点往后
        System.out.println((double)(5/2));//(double)2 -> 2.0
        System.out.println((double)5/2);// 5.0 / 2 -> 2.5
        int i = 5;
        int j = 2;
        System.out.println(1.0 * i / j);//2.5

        //TODO 目标2:掌握使用 + 符号作连接符的情况
        // “+” 符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串
        // 技巧:从左往右,能算则算,不能算则连在一起
        int a2 = 5;
        System.out.println("abc" + a2);//"abc5"
        System.out.println(a2 + 5 );//10
        System.out.println("itheima" + a2 + 'a');//"itheima5a"
        System.out.println(a2 + 'a' + "itheima");//"102itheima"
    }
}
2.自增自减运算符
  • ++变量名、变量名++、–变量名、变量名–
  • 注意之能作用于变量而不能作用于字面量,
  • 以及 ++变量名 是先+后算,变量名++ 是先算后+;–同理
public class OperatorDemo2 {
    public static void main(String[] args) {
        //TODO 目标:自增自减
        // 比较简单,不写了
    }
}
3.赋值运算符
  • =、+=、-=、*=、/=、%=
  • 格式: byte a = 10;a += 10; <==> byte a = 10; a = (byte)(a+10);//因为10默认为int,故需要强制类型转换
public class OperatorDemo3 {
    public static void main(String[] args) {
        //TODO 目标:掌握扩展赋值运算符的使用
        /*格式:
        a += b <--> a = (a的数据类型)(a+b);
        即隐含强制类型转换*/
        //todo 此处type包TypeConversionDemo2

        byte x= 10;
        byte y = 30;
//        x = x + y; 报错:需要byte 提供int
//        x = (byte) (x+y); √
        x += y; //与上行等效
        System.out.println(x);
    }
}

4.关系运算符
  • ==、>=…
  • 判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值
public class OperatorDemo4 {
    public static void main(String[] args) {
        //TODO 目标:掌握关系运算符的使用
        //判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值
		//比较简单,不写了
    }
}
 
5.逻辑运算符
  • 把多个条件放在一起运算,最终返回布尔类型的值
  • 逻辑与&:多个条件必须都是true,结果才是true;有一个是false,结果就是false
  • 逻辑或|:多个条件中只要有一个是true,结果就是true
  • 逻辑非!:就是取反,!true == false,!false == true
  • 逻辑异或^:前后条件的结果相同,就直接返回false,前后条件的结果不同,返回true
  • 短路与&&:判断结果与‘&’一样,过程不同
  • 短路或||:判断结果与‘|’一样,
public class OperatorDemo5 {
    public static void main(String[] args) {
        //TODO 目标:掌握逻辑运算符的使用
        //把多个条件放在一起运算,最终返回布尔类型的值
        //逻辑与&:多个条件必须都是true,结果才是true;有一个是false,结果就是false
        //逻辑或|:多个条件中只要有一个是true,结果就是true
        //逻辑非!:就是取反,!true == false,!false == true
        //逻辑异或^:前后条件的结果相同,就直接返回false,前后条件的结果不同,返回true

        //短路与&&:判断结果与‘&’一样,过程不同
        //短路或||:判断结果与‘|’一样,
    }
}
 
6.三元运算符
  • 语法:

    条件表达式 ? 值1 :值2

    执行流程:若条件表达式返回true,则返回值1,反之返回值2

public class OperatorDemo6 {
    public static void main(String[] args) {
        //TODO 目标:掌握三元运算符的使用
        /*
        语法:
        条件表达式 ? 值1 : 值2;
        执行流程:首先计算条件表达式的值,若为true,返回值1,若为false,返回值2
         */

        //及格
        double score = 98.5;
        String rs = score >= 60 ? "及格" : "不及格";
        System.out.println(rs);

        //最大值
        int a = 10;
        int b = 5;
        int max = a > b ? a : b;
        System.out.println(max);

    }
}
 

Scanner

  • 步骤:

    1. 导包

      import java.util.Scanner;

    2. 抄写代码,整体含义:得到一个键盘扫描器对象(东西)

Scanner sc = new Scanner(System.in);

​ 3. 开始 调用sc的功能,来接收用户键盘输入的数据

int age = sc.nextInt();//执行到这,会开始等待用户输入一个整数,直到用户按了enter键,才会拿到数据

完整代码:

import java.util.Scanner;
public class ScannerDemo1 {
    public static void main(String[] args) {
        //1.导包
        //2.抄写代码,整体含义:得到一个键盘扫描器对象(东西)
        Scanner sc = new Scanner(System.in);

        //3.开始 调用sc的功能,来接收用户键盘输入的数据
        System.out.println("请输入您的年龄:");
        int age = sc.nextInt();//执行到这,会开始等待用户输入一个整数,直到用户按了enter键,才会拿到数据
        System.out.println("您的年龄是:" + age);

        System.out.println("请输入您的名字: ");
        String name = sc.next();//执行到这,会开始等待用户输入一个字符串,直到用户按了enter键,才会拿到数据
        System.out.println(name + "欢迎您进入系统");

       /* Scanner i = new Scanner(System.in);
        int a = i.nextInt();
        System.out.println(a);*/
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值