1. 变量定义

Java的变量声明和C的几乎一样,格式为

  1. 数据类型 变量名 = ;
  • 变量必须先声明,后使用
  • 变量都定义在其作用域内并在作用域内使用,出了作用域就失效了
  • 同一个作用域内,不可以声明两个同名变量
  • 同上,一个文件内不能声明两个同名类

2. 变量类型

变量基础 - 图2

image.png


3 基本数据类型

3.1 整型

类型 占用空间 表数范围
byte 1 字节 -128~127
short 2 字节 -2^15~2^15-1
int 4 字节 -2^31~2^31-1
long 8 字节 -2^63~2^63-1
  • 当变量赋值超范围时,不会像C语言那样自动颠倒,而是直接报错
  • long 型变量的值必须以大写或小写的 L 结尾。
  • 通常用 int 就行了

    3.2 浮点型

    | 类型 | 占用空间 | 表数范围 | 精度 | | —- | —- | —- | —- | | 单精度 float | 4 字节 | -3.403 E38 ~ 3.403 E38 | 7位有效数字 | | 双精度 double | 8 字节 | -1.798 E308 ~ 1.798 E308 | 14位有效数字 |

  • float 型变量的值必须以小写或大写的 F 结尾

  • 通常用 double 定义浮点型。

    3.3 字符型 char

    char (1字符 = 2字节)。不同于C语言,java中的char代表字符而不是字节,一个字符占用2个字节。
    在使用中文字符时,会出现字符编码错误的问题:
    image.png
    这是因为JDK是国际版的,我们在用javac编译时,编译程序首先会获得我们操作系统默认采用的编码格式(GBK),然后JDK就把Java源文件从GBK编码格式转换为Java内部默认的Unicode格式放入内存中,然后javac把转换后的Unicode格式的文件编译成class类文件,此时,class文件是Unicode编码的,它暂存在内存中,紧接着,JDK将此以Unicode格式编码的class文件保存到操作系统中形成我们见到的class文件。当我们不加设置就编译时,相当于使用了参数:javac -encoding GBK Test.java,就会出现不兼容的情况 。
    因此,需要用 -encoding UTF-8 来指明使用unicode编码格式,如图:
    image.png
    char型变量也可以用作转移字符。
    image.png

    3.4 boolen型

    只能有两个值,要么 true 要么 false。
    image.png

4. 引用数据类型

4.1 String 型

image.png
String 可以和8中基本数据类型的变量做运算,但运算只能是连接运算 + ,且运算结果都是String类型:
image.png
image.png
要注意运算顺序的问题,当String在+号最前面时,全部的+都是拼接运算,反之,但String在后面时,String前的+号就是普通的算术运算加法

  1. System.out.println(3+4+"Hello!"); // 7Hello!
  2. System.out.println("Hello!"+3+4); // Hello!34
  3. System.out.println('a'+1+"Hello!"); // 98Hello!
  4. System.out.println("Hello!"+'a'+1); // Hello!a1

5 类型转换

5.1 自动类型(提升)转换

多个不同类型的变量作运算,运算结果至少要用其中最大的那个类型接收。换言之,小类型和大类型做算,结果自动转换为大类型。自动转换顺序为:
byte、char、short —> short —> int —> long —> float —> double
其中,bytr、char、short 三者是并列关系,即这三者做运算,结果都是 int 型。并且,这挑规则包括同种类型的运算,即 byte + byte = int 、char + char = int、 short + short = int
image.png
说明:这里的大小指的是能表示数的范围大小,而不是内存大小,比如 float 占4字节,long占8字节,但是float > long

5.2 强制类型转换

是自动类型提升的逆运算,将大类型转换为小类型。实现方法同C语言,可能出现精度损失

  1. double d1 = 1.3415;
  2. int i1 = (int) d1;