【JavaSE】1. 数据类型与变量

一、数据类型

  • Java 中,数值类型都是有取值范围的,超过取值范围会编译失败。

    • 只有基本数据类型才有包装类
    1. 基本数据类型(8 种)
      1. 整数:byte,short,int,long
      2. 浮点数:float,double
      3. 字符:char
      4. 布尔类型:boolean
    2. 引用类型
      1. String
      2. 数组
      3. 接口
      4. 枚举

1. 整形(int&long)

  1. int 不管是多少位的操作系统,永远是 4 个字节。所以 Java 的可移植性强,且是跨平台的
  2. Java 中的 int 没有所谓的无符号,统一都是有符号的
  3. 取值范围:-2 ^ 31 — 2 ^ 31 - 1
    查看 int 的最大最小值:
public class HelloWorld {
	public static void main(String[] args) {
		int a = 10;
		System.out.println(a);
		System.out.println(Integer.MAX_VALUE);
		System.out.println(Integer.MIN_VALUE);
	}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v7WcdJIh-1634478220154)(assets/image-20211013204346-3v3q0ib.png)]

  1. 变量的命名:小驼峰格式。变量名由下划线、数字、字母、美元符号等组成,不能以数字开头。

    1. 详细看《阿里巴巴 Java 开发手册》
    2. 最好用英文,不要用拼音(不会的翻译一下)
  2. 变量定义必须初始化。

    1. Java 比较安全,如果不初始化就使用,会直接报错(编译不通过)
  3. long 是长整形,64 位;

    • Java 中没有 long long 类型!!!
    • 如何定义 long 类型变量
    long a = 10L;
    //这里最好加一个L(不要小写,容易与1弄混淆)
    
  4. short(短整型,一般不用)

    1. 一个 short 变量占两个字节
    2. 第一个为符号位
    3. 范围:-32768 — 32768(-2 ^ 15 — 2 ^ 15 - 1)

2. 浮点数

  1. double(8 个字节)
    • 注意:不能用两个 int 做除法

    • 正确写法:

      public static void main(String[] args) {
      	double a = 1.0;
      	double b = 2.0;
      	System.out.println(a / b);
      

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GoDxs3Ju-1634478220161)(assets/image-20211013205538-kauciyl.png)]

    • 错误写法:

      int a = 1;
      int b = 2.0;
      System.out.println(a / b);
      

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jVQCnU0Q-1634478220164)(assets/image-20211013205820-o4lpuyc.png)]

  2. float(4 个字节)
    1. 浮点运算时类型一定要匹配,否则编译过不去(double 与 float 也不能混用)

      float a = 1.1;
      System.out.println(a);
      

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DN8A3dHR-1634478220167)(assets/image-20211013210318-atq7yzt.png)]

    2. 正确写法:(必须在浮点数后加 f)

      float a = 1.1f;
      System.out.println(a);
      

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qkXDOrJv-1634478220169)(assets/image-20211013210405-v2y40h5.png)]

    3. Java 中没有 C 语言中截断的概念

3. 字符类型

  1. char
    1. 一个 char 类型占用两个字节
    2. 可以直接给一个 char 类型变量赋值一个汉字(只需要加上 utf-8 编码)
    3. 范围:-2 ^16 — 2 ^ 26 - 1
  2. byte(字节类型)
    1. 一个 byte 类型只占用一个字节(8bit)
    2. 相当于 C 语言中的 char
    3. 存储范围(-128 – 127)

4. 布尔类型(boolean)

  1. boolean,只有两个取值,true 和 false。
  2. 不存在与其他类型的转换,如 C 语言中的: 1 表示 true,0 表示 false 。
  3. 同样,boolean 类型也不能 +1-1 这种操作
  4. 在 JVM 的规范中,没有规定布尔类型的大小,有的 1bit,有的 1 字节

5. 字符串类型(String)

  1. 注意大小写,String

  2. 拼接

    1. 字符串之间的拼接
    2. 其他类型和字符串的拼接
      1. 字符串在前,其他数据类型会被转化为字符串
      2. 其他数据在遇到字符串之前数据类型不会改变,但是一旦遇到字符串,就会变成字符串类型。
    System.out.println("hello"+"world"); //helloworld 拼接
    System.out.println("hello"+10+20); //hello1020 先字符串,再其他。其他会变字符串
    System.out.println(10+20+"hello"); //30hello 先其他,再字符串。字符串之前数据类型不变,遇到字符串后变为字符串
    System.out.println("hello"+(10+20)); //hello30 先计算字符串里面的
    System.out.println(10 + "" + 20 +"world");//1020world 10(int)碰到“”(空字符串)之后,被转化为字符串。
    System.out.println("a="+10+", b="+20); //a=10, b=20
    

6. 转义字符

  1. 与 C 语言类似
  2. \n 换行
  3. \t 水平制表符
  4. \'单引号
  5. \"双引号
  6. \\反斜杠
String s1 = "\"bit\""; // "bit"
String s2 = "\\bit\\"; // \bit\
String s3 = "\\\\bit\\\\"; // \\bit\\
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);

二、变量

1. 变量

  • 程序运行的时候可以改变的量
  • 在程序运行的时候才能知道值是几(对比常量)
  • Java 中没有所谓全局变量的概念!!!
  1. 成员变量(定义在类的内部,方法的外部
    1. 普通成员变量
    2. 静态成员变量
  2. 局部变量

2. 变量的作用域

变量的作用范围

  • 找花括号,与 C 语言一样

3. 变量的命名规则

  1. 只能包含:字母、数字、下划线、美元符号
  2. 变量名是大小写敏感的,num 和 Num 是不同的变量
  3. 数字不能开头
  4. 其他建议
    1. 建议统一小驼峰:maxNum
    2. 中文和 美元符号 $ 合法,但非常不推荐使用

4. 常量

  1. 字面值常量:1, 2.1,“hello”…
  2. final 修饰的常量(类似 C 语言中的 const)
    1. 程序运行中不可以修改的量,只能初始化一次
    2. 在程序编译的时候,就已经确定了其值。(对比变量)

5. 类型转换(与 C 不同)

  • Java 本身是强类型语言
  • C 语言是弱类型语言
  1. 不同数字类型(int long double 等)的变量之间赋值
    1. 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行
    2. 如 int->long 可以,但 long->int 不行
    3. 可以强制类型转换(有风险,非常不建议)
      1. 与 c 语言相同
      2.  long l = 0;
         int c = (int)l;
        
  2. int 与 boolean
    1. int 与 boolean 类型不能相互强转
    2. 这两个是完全不相干的两种类型,不能相互赋值
  3. int 字面常量给 byte 赋值
    1. byte 范围:-128 — +127
    2. 字面值常量赋值的时候, Java 会自动进行一些检查校验, 判定赋值是否合理
  4. 注意:类型提升的问题
    1. 下面这个情况会编译失败

      byte a = 1;
      byte b = 2;
      byte c = (byte)a+b; //提示不兼容的类型
      
      • 这是因为 CPU 中进行加法运算的时候,会把不足 4 位的变量提升为 int 类型。(类型提升)
    2. 要用到强制类型转换

      byte a = 1;
      byte b = 2;
      byte c = (byte)(a+b); 
      //注意a+b的括号不能少
      
    3. 总结

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

三、运算符

1. 算数运算符

  1. 基本算数运算符:+ - * /
    1. 注意除法: /

      1. int / int 还是 int,用小数需要用 double
      2. 除数不能为 0(java 会检查)
        1. 否则会抛出异常(算数异常)
    2. % 表示取余,

      1. 不仅仅可以对 int 求模, 也能对 double 来求模
        System.out.println(11.5%2.0); //1.5
        System.out.println(-10%3); //-1
        System.out.println(10%-3); //1
        System.out.println(-10%-3); //-1
        
    3. -=, +=, *=, /=

      • 有时能自动强制类型转换
              short a = 0;
              //a = (short)(a+9);
              a += 9; //自动类型转换
      
  2. 关系运算符
    1. == != < > <= >=
    2. 所有关系运算符的返回值都是 boolean 表达式
  3. 自增/自减运算符(与 C 语言完全一致)
    1. 注意 a++ 与 ++a 的区别
  4. 布尔表达式
    1. 逻辑与:&& ,逻辑或: ||,逻辑非:!
    2. 逻辑符号两边(!是单边)必须都是布尔表达式
      1. 如!a<b 是错误的,因为 a 不是布尔表达式
      2. !(a<b)才正确
    3. 短路运算
      • 如 println(10 > 20 && 10 / 0 == 0),后半部分不会运行,不会报错。
  5. 位运算符
    1. 按位与:&
      1. 全一为 1,有一个不为 1 就是 0
    2. 按位或: |
      1. 对应位如果有 1,则结果为 1。
    3. 按位异或:^
      1. 相同为 0,不同为 1
    4. 按位取反:~(键盘 esc 下面的健 +shift)
      1. 0 变 1,1 变 0
  6. 移位运算符
    1. << 左移

      1. 左移,右侧补 0
      2. 左移一位相当于*2
    2. 右移

      1. 右移,补符号位
      2. 右移一位相当于 / 2
    3. 无符号右移

      1. 不管符号位是 0 还是 1,左边统统补 0
  7. 条件运算符(三目运算符)
    1. 表达式 1?表达式 2:表达式 3
    2. 表达式 1 必须为布尔表达式
    3. 表达式 1 为真返回表达式 2,为假返回表达式 2
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值