• JavaSE ---01 数据类型与运算符


    正所谓温故而知新,可以为师矣,虽然已经学过一遍javase,但是回头复习仍然能找到很多初学的时候遗忘的点,所以我们在学习的途中还是要保持空杯心态,这样才能走的更远,切忌眼高手低.

    1.变量

    说到变量大家都经常去使用,那么什么是变量呢?下面给出变量的定义

    变量指的是程序运行时可变的量 . 相当于开辟一块内存空间来保存一些数据 .
    类型则是对变量的种类进行了划分 , 不同的类型的变量具有不同的特性 .
    我们所讨论的 " 变量 " 主要和我们的 " 内存 " 这样的硬件设备密切相关

     

    2.基本数据类型 (8个)

    1. int 4
    2. //注:int在java中与系统无关,都是4个字节
    3. byte 1
    4. float 4
    5. double 8
    6. long 8
    7. char 2
    8. boolean //java本身没有规定大小
    9. short 2

    2.1 int类型

    int类型是4个字节 大小范围也就是 -2^31 - 2^31-1

    1. System.out.println(Integer.MAX_VALUE); // int 的最大值
    2. System.out.println(Integer.MIN_VALUE)// int的最小值

    注:这里的Integer我们可以暂且认为是int的包装类,可以先不去管他.

    如果超出int的取值范围,也会发生溢出的情况,下面我们就可以使用更大的数据类型long(长整型)

    2.2 long 长整型

      语法

    1. long num = 10L; // 定义一个长整型变量, 初始值写作 10l 也可以(小写的 L, 不是数字1).
    2. System.out.println(num)

    2.3 double 浮点型

    注:java中int除以int仍然是int ,比如1/2 答案是0

    1. double num = 1.1;
    2. System.out.println(num * num)
    3.    
    4. // 执行结果
    5. 1.2100000000000002

    这里小数的存储仍然是IEEE 754标准,所以仍然会有精度误差.

    2.4 float数据类型

    1. float num = 1.0f;    // 写作 1.0F 也可以
    2. System.out.println(num);

    这里加一个f的原因就是和double区分,但是精度不高,工程上用得不多.一般用double代替.

    2.5 char 类型

    1. char ch = 'A';
    2. char a = '牛';

    注:这里java中的char使用的是unicode编码而不是ascii编码,所以甚至支持中文,占用2个字节而不是c语言中的1个字节.

    2.6 byte类型

    这也是c语言没有的类型.

    byte a = 10;

    注:byte类型和char类型没关系.

    2.7 短整型变量

    1. short a = 10;
    2. //不建议使用,因为范围较小

    2.8 布尔类型变量

    boolean flag = false;

    注:java中的boolean类型中只有true和false,不存在0为假其他为真的情况,java中没有规定boolean的大小.

     

    3.引用数据类型 

    3.1字符串类型

    字符串拼接操作

    1. String s = "Hello";
    2. String s1 = "World";
    3. String s3 =s + s1; //Hello World

    注:

    1. Java 使用 双引号 + 若干字符 的方式表示字符串字面值 .
    2. 和上面的类型不同 , String 不是基本类型 , 而是 引用类型 ( 后面重点解释 ).
    3. 字符串中的一些特定的不太方便直接表示的字符需要进行转义

    3.2 常见转义字符

    转义字符解释
    \n换行
    \t水平制表符
    \'单引号
    \"双引号
    \\反斜杠


    3.3 字符串+整数

    结果是字符串

    1. String str = "result = ";
    2. int a = 10;
    3. int b = 20;
    4. String result = str + a + b;
    5. System.out.println(result);
    6. // 执行结果
    7. result = 1020

    4.类型转换 

    Java 作为一个强类型编程语言 , 当不同类型之间的变量相互赋值的时候 , 会有教严格的校验
    举例:
    1. int a = 10;
    2. long b = 20;
    3. a = b; // 编译出错, 提示可能会损失精度.
    4. b = a; // 编译通过.
    5. int a = 10;
    6. double b = 1.0;
    7. a = b; // 编译出错, 提示可能会损失精度.
    8. b = a; //通过

    大的类型不能赋值给小的类型,小的类型可以赋值给大的类型.

    boolean类型不能和int相互转换.

    4.1 强制类型转换 

    1. int a = 0;
    2. double b = 10.5;
    3. a = (int)b;
    4. int a = 10;
    5. boolean b = false;
    6. b = (boolean)a; //报错

    结论: 
    1. 强制类型转换可能会导致精度丢失. 如刚才的例子中, 赋值之后, 10.5 就变成 10 了, 小数点后面的部分被忽略.
    2. 强制类型转换不是一定能成功, 互不相干的类型之间无法强转

     

    4.2 数值提升

    4.2.1 int 和 long 做运算
    1. int a = 10;
    2. long b = 20;
    3. int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度
    4. long d = a + b; // 编译通过.

    结论: 当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换
     

    4.2.2 byte自运算
    1. byte a = 10;
    2. byte b = 20;
    3. byte c = a + b;
    4. System.out.println(c);
    5. // 编译报错
    6. Test.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失
    7. byte c = a + b;

    原因:虽然a和b都是byte,但是加起来的时候会转化为int再相加,将int赋给byte是行不通的

    正确写法:(强转)

    1. byte a = 10;
    2. byte b = 20;
    3. byte c = (byte)(a + b);
    4. System.out.println(c);

    总结:

    1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
    2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.

    4.2.3 int 和String直接的转换
    int ->String
    1. int num = 10;
    2. // 方法1
    3. String str1 = num + "";
    4. // 方法2
    5. String str2 = String.valueOf(num);

    String ->int

    1. String str = "100";
    2. int num = Integer.parseInt(str);

     

  • 相关阅读:
    (论文阅读34-39)理解CNN
    大数据:Shell的操作(2)
    节约软件开发成本,关键在这儿。
    《统计学习方法》啃书手册|字符串核函数动态规划的实现
    不只有 Spring,这四款 Java 基础开发框架同样值得关注!
    huggingface Tokenizers 官网文档学习:tokenizer训练保存与使用
    前端开发流程
    TSA优化算法——模仿航海过程中外套的喷气推进和蜂群行为(Matlab代码实现)
    怎样正确做 Web 应用的压力测试?
    Python 最好用的8个VS Code扩展
  • 原文地址:https://blog.csdn.net/qiuqiushuibx/article/details/134024866