JAVA基础-数据类型和运算符

目录

1.数据类型

1.1自动类型转换

 1.2 表达式的自动类型转换

1.3 强制类型转换

2.运算符

2.1算术运算符

2.2 自增自减运算符

 2.3 赋值运算符

2.4 逻辑运算符

2.5 三元运算符

2.6 运算优先级

 3.案例技术:获取用户键盘输入的数据


1.数据类型

 在用long时,默认为int类型,如果在后面加上L,则为long类型。

在用float时,小数默认为double,如果在后面加上F或者f则为float类型,一般不使用float,计算时会导致数据失真。

alt+enter万能提示键

对比char和String

A---65

a---97

0---48

1. 数据类型与存储方式

charString
基本数据类型(Primitive Type)引用数据类型(Reference Type)
存储单个 Unicode 字符存储不可变的字符序列(字符串)
占用 2 个字节(16 位)底层使用char[]数组存储,占用空间动态变化
用单引号表示:'A'用双引号表示:"Hello"

2. 核心特性对比

特性charString
表示形式单个字符:'A''中''\n'字符串:"ABC""中国"""
初始化char c = 'A';String s = "Hello"; 或 new String("Hello");
空值处理不能为null(默认值为\u0000可以为nullString s = null;
常用操作转换为数字、比较字符值拼接、截取、查找、替换、正则匹配等

1.1自动类型转换

自动类型转换指的是,数据范围小的变量可以直接赋值给数据范围大的变量。

eg:byte a = 12;

        int b = a;//这里就发生了自动类型转换(把byte类型转换int类型)

原理:自动类型转换其本质就是在较小数据类型数据前面,补了若干个字节

byte < short < int < long < float < double
char < int < long < float < double     

 除了byte和int之间的转换之外,其他类型也可以转换,转换顺序如下图所示:

 char虽然是字符型,但是它实际上和int是一样的,因为字符有对应的编号,在底层这些字符都是以对应的编号来进行储存的,如a---97、A---65、0---48

public class TypeConversionDemo1 {
    public static void main(String[] args) {
       // 目标:理解自动类型转换机制。
        byte a = 12;
        int b = a; // 发生了自动类型转换了
        System.out.println(a);
        System.out.println(b);

        int c = 100; // 4
        double d = c;// 8 发生了自动类型转换了
        System.out.println(d);

        char ch = 'a'; // 'a' 97 => 00000000 01100001
        int i = ch; // 发生了自动类型转换了 =>  00000000 00000000  00000000 01100001
        System.out.println(i);
        
        int ho = 'a';//97
        int ok = 'A';//65
        int oo = '0';//48
        System.out.println(ho);
        System.out.println(ok);
        System.out.println(oo);
    }
}

 1.2 表达式的自动类型转换

 如果同一个表达式中,出现不同类型的变量或者数据一起运算,这种情况下运算结果是一个什么数据类型呢?需要遵守下面的两条运算规则:

1.多种数据类型参与运算,其结果以大的数据类型为准
2.byte,short,char 三种类型数据在和其他类型数据运算时,都会转换为int类型再运算(原因是byte的范围非常小,在进行运算时很有可能越界,所以直接把类型都转换为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;
        int rs3 = i + j;
        System.out.println(rs3);

        // 面试笔试题: 即使两个byte运算,结果也会提升为int
        byte b1 = 110;
        byte b2 = 80;
        //byte b3 = b1 + b2;//报错
        int b3 = b1 + b2;
        System.out.println(b3);
    }
}

1.3 强制类型转换

大范围的数据直接赋值给小范围的变量是会报错的。因为数据范围大的数据,赋值给数据范围小的变量,它有可能装不下;就像把一个大桶的水倒入一个小桶中,有溢出的风险。

什么是强制类型转换?

目标数据类型  变量名  =  (目标数据类型)被转换的数据;

public class TypeConversionDemo3 {
    public static void main(String[] args) {
        // 目标:掌握强制类型转换。
        int a = 20;
        byte b = (byte) a;  // ALT + ENTER 强制类型转换。
        System.out.println(a);
        System.out.println(b);

        int i = 1500;
        byte j = (byte) i;
        System.out.println(j);

        double d = 99.5;
        int m = (int) d; // 强制类型转换
        System.out.println(m); // 丢掉小数部分,保留整数部分
    }
}

 原理:强制类型转换的原理,其实就是强行把前面几个字节砍掉,但是有数据丢失的风险


 

2.运算符

2.1算术运算符

如果想得到两个数字相除的准确数字,可以在运算时在变量前*1.0

eg:1.0*5/2得到的结果为2.5

 +符号除了用于加法运算,还可以作为连接符。+符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。(能算则算,不能算则在一起)

提示:shift+F6重构键,可以把页面中的相同变量名都选中进行操作。

public class OperatorDemo1 {
    public static void main(String[] args) {
        // 目标:掌握基本的算术运算符的使用。
        int a = 10;
        int b = 2;
        System.out.println(a + b);
        System.out.println(a - b);
        System.out.println(a * b); // 20
        System.out.println(a / b); // 5
        System.out.println(5 / 2); // 2.5 ==> 2
        System.out.println(5.0 / 2); // 2.5
        int i = 5;
        int j = 2;
        System.out.println(1.0 * i / j); // 2.5

        System.out.println(a % b); // 0
        System.out.println(3 % 2); // 1

        System.out.println("---------------------------------------");

        // 目标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.2 自增自减运算符

单独使用时,++或--放在前面和后面都一样,都是对变量进行+1或者-1.

++、-- 如果不是单独使用(如在表达式中或者同时有其他的操作),放在变量前后会存在明显区别

  • 放在变量的前面,先对变量进行+1、-1,在拿变量的值进行运算。
int a = 10;
int rs = ++a;
System.out.println(rs);//11
System.out.println(a);//11
  • 放在变量的后面,再拿变量的值进行运算,再对变量的值进行+1、-1。
int b = 10;
int rs = b++;
System.out.println(rs);//10
System.out.println(b);//11

 2.3 赋值运算符

问题1:下面的代码否有问题?

byte x = 10;
byte y = 30;
x = x + y;  //这句代码有问题,因为两个byte类型数据相加,会提升为int类型;

 有问题,因为两个byte类型数据相加,会提升为int类型。

问题2:下面的代码是否有问题?

byte x = 10;
byte y = 30;
x+=3; //这句代码没有问题,因为这里有隐含的强制类型转换
	  //x+=3; 等价于 byte x = (byte)(x+y);

没有问题,赋值运算符有隐含的强制类型转换,等价于byte x = (byte)(x+y);

2.4 逻辑运算符

 在这里需要注意&&和&还有||和|的区别:

&&左边为false,右边不执行。而&无论怎么样两边都会执行。

||左边为true,右边不执行。而|无论怎么样两边都执行。

int a = 10;
int b = 20;
System.out.println(a > 100 && ++b >99);//false
System.out.println(b);//b = 20 左边为false,右边并没有执行

int m = 10;
int n = 30;
System.out.println(m > 3 || ++n >40);//true
Sysyem.out.println(n)//n = 30 左边是true,右边就不执行

2.5 三元运算符

三元运算符的格式:

关系表达式? 值1 : 值2;

public class OperatorDemo6 {
    public static void main(String[] args) {
        // 目标:掌握三元运算符的基本使用。
        double score = 58.5;
        String rs = score >= 60 ? "成绩及格" : "成绩不及格";
        System.out.println(rs);

        // 需求2:找出2个整数中的较大值,并输出。
        int a = 99;
        int b = 69;
        int max = a > b ? a : b;
        System.out.println(max);

        // 需求3:找3个整数中的较大值。
        int i = 10;
        int j = 45;
        int k = 34;

        // 找出2个整数中的较大值。
        int temp = i > j ? i : j;
        // 找出temp与k中的较大值。
        int max2 = temp > k ? temp : k;
        System.out.println(max2);
    }
}

2.6 运算优先级

 &&运算比||运算的优先级高,所以&&和||同时存在时,是先算&&再算||;

//这里&&先算 相当于 true || false 结果为true
System.out.println(10 > 3 || 10 > 3 && 10 < 3); // true

 在实际开发中,其实我们很少考虑运算优先级, 因为如果你想让某些数据先运算,其实加()就可以了,这样阅读性更高。

//有括号先算 相当于 true && false 结果为false
System.out.println((10 > 3 || 10 > 3) && 10 < 3); //false

 3.案例技术:获取用户键盘输入的数据

键盘录入这个事情,其实并不是我们自己做的,而是Java本身就提供了这样的功能,我们按照它的要求,去调用就行。

public class ScannerDemo1 {
    public static void main(String[] args) {
        // 1、导包:一般不需要我们自己做,idea工具会自动帮助我们 导包的。
        // 2、抄写代码:得到一个键盘扫描器对象(东西)
        Scanner sc = new Scanner(System.in);

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值