从初学者到专家:Java 数据类型和变量的完整指南

喜欢ヅ旅行 2023-10-14 11:18 46阅读 0赞

目录

一、字面常量

1.1什么常量?

1.2常见的六种常量类型

二、数据类型

2.1什么是数据类型?

2.2基本数据类型:

2.3引用数据类型

三、变量

3.1什么是变量?

3.2变量的命名规则

3.3变量的作用域

3.4变量的被final修饰

四.类型转换

4.1什么是类型转换?

4.2自动类型转换

4.3强制类型转换

4.4注意事项

4.5类型提升

五.字符串类型

5.1什么是Java字符串类型?

5.2如何创建和使用字符串?

5.3常见的字符串操作

5.3字符串与不同类型之间的转换


c6cfbd0a82374abd9f257abbe554f0db.png

4094541726054ea0ba32dd1afbcdb805.png

声明:Java的数据类型与变量

在Java中,数据类型是指变量存储数据的类型,Java支持多种基本数据类型,包括整型、浮点型、字符型、布尔型等等。对于不同的数据类型,Java也提供了不同的字面常量来表示它们的值。在使用Java进行编程时,了解数据类型及其特点是非常重要的。

一、字面常量

1.1什么常量?

字面常量是指程序中直接使用的常量值,不需要进行计算或处理。在Java中,字面常量包括以下几种类型:

1.2常见的六种常量类型

  1. 整型常量
    整型常量表示整数值,可以用十进制、八进制或十六进制来表示。

    int decimalValue = 10; // 十进制
    int octalValue = 012; // 八进制
    int hexValue = 0xA; // 十六进制

  2. 浮点型常量
    浮点型常量表示实数值,包括单精度浮点型和双精度浮点型。

    float floatValue = 3.14f; // 单精度浮点型
    double doubleValue = 3.14; // 双精度浮点型

  3. 字符常量
    字符常量表示单个字符,用单引号括起来。

    char charValue = ‘a’; // 字符常量

  4. 字符串常量
    字符串常量表示多个字符组成的字符串,用双引号括起来。

    String stringValue = “Hello, World!”; // 字符串常量

  5. 布尔型常量
    布尔型常量表示真或假,用true和false关键字表示。

    boolean boolValue_1 = true; // 布尔型常量
    boolean boolValue_2 = false; // 布尔型常量

  6. null常量
    null常量表示空对象引用。

    String strValue = null; // null常量

二、数据类型

2.1什么是数据类型?

Java的数据类型分为两类:基本数据类型和引用数据类型。基本数据类型包括整型、浮点型、字符型和布尔型,它们都是Java语言提供的内置类型。引用数据类型包括类、接口、数组等,它们都是在程序中自定义的类型。

2.2基本数据类型:

  1. 整型
    整型数据类型包括byte、short、int和long四种类型,它们分别占用1、2、4和8个字节,并且有不同的取值范围。如下表格:
整型数据类型



























类型 占用空间 取值范围
byte 1字节 -128~127
short 2字节 -32768~32767
int  4字节 -2147483648~2147483647
long 8字节 -9223372036854775808~9223372036854775807
  1. 浮点型
    浮点型数据类型包括float和double两种类型,它们分别占用4和8个字节,并且有不同的精度和取值范围。
  1. float f = 3.14f;
  2. double d = 3.14;
浮点数据类型

















类型 占用空间 精度范围
float 4字节 精度为6~7位
double 8字节 精度为15~16位
  1. 字符型
    字符型数据类型char占用2个字节,用于表示Unicode编码的字符。

    char c = ‘a’; // 字符型数据类型

  2. 布尔型
    布尔型数据类型boolean只有两个取值:true和false,占用1个字节。

    boolean b1 = true; // 布尔型数据类型
    boolean b2 = false; // 布尔型数据类型

2.3引用数据类型

Java中的引用数据类型包括类、接口、数组、枚举、注解等。这些类型的数据都是通过引用方式存储在堆内存中的。

类是面向对象编程的基础,Java中的所有类都是引用数据类型。类可以包含属性、方法和构造函数等成员,通过创建对象来使用类的成员。

  1. public class lhy {
  2. public static void main(String[] args) {
  3. class Person {
  4. String name;
  5. int age;
  6. void sayHello() {
  7. System.out.println("Hello, my name is " + name + ", I'm " + age + " years old.");
  8. }
  9. }
  10. Person p = new Person(); // 创建Person类的对象p
  11. p.name = "Tom";
  12. p.age = 25;
  13. p.sayHello(); // 输出:Hello, my name is Tom, I'm 25 years old.
  14. }
  15. }

输出如下:

838933c69af6413788fa3c4d7a80d1d7.png


  1. 接口

接口是一种抽象的类型,它定义了一组方法的签名,但没有实现这些方法的具体代码。接口可以被类实现,一个类可以实现多个接口。

  1. interface Flyable {
  2. void fly();
  3. }
  4. class Bird implements Flyable {
  5. public void fly() {
  6. System.out.println("I'm a bird, I'm flying.");
  7. }
  8. }
  9. Bird b = new Bird(); // 创建Bird类的对象b
  10. b.fly(); // 输出:I'm a bird, I'm flying.

输出如下:

5aacc21b4ce749e784f56febd0be45d7.png


  1. 数组

数组是一种存储多个相同类型数据的容器,Java中的数组可以存储任何类型的数据,包括基本类型和引用类型。

  1. int[] nums = new int[]{1, 2, 3}; // 声明一个int类型的数组nums
  2. String[] names = new String[]{"Tom", "Jerry", "Alice"}; // 声明一个String类型的数组names

  1. 枚举

枚举是一种特殊的类型,它限定了变量只能取枚举中定义的值,可以避免使用数字或字符串表示状态等情况下的错误。

  1. enum Color {
  2. RED, GREEN, BLUE
  3. }
  4. Color c = Color.RED; // 声明一个Color类型的变量c

  1. 注解

注解是一种用于提供元数据信息的标记,它可以用于类、方法、变量等元素上,用于描述它们的属性和特征。注解可以通过反射机制获取

除了以上提到的引用数据类型之外,Java还有许多其他的数据类型,如集合、映射等,这些数据类型在Java的开发中也是非常常用的。在实际开发中,开发人员需要根据具体的业务需求选择合适的数据类型来完成开发任务。

三、变量

3.1什么是变量?

在程序中,除了有始终不变的常量外,有些内容可能会经常改变,比如:人的年龄、身高、成绩分数、数学函数的 计算结果等,对于这些经常改变的内容,在**Java**程序中,称为变量而数据类型就是用来定义不同种类变量的

定义变量的语法格式为:

数据类型 变量名 = 初始值;

  1. public class lhy {
  2. public static void main(String[] args) {
  3. int a = 10; // 定义整形变量a,a是变量名也称为标识符,该变量中放置的值为10
  4. double d = 3.14;
  5. char c = 'A';
  6. boolean b = true;
  7. System.out.println(a);
  8. System.out.println(d);
  9. System.out.println(c);
  10. System.out.println(b);
  11. a = 100; // a是变量,a中的值是可以修改的,注意:= 在java中表示赋值,即将100交给a,a中保存的值就是100
  12. System.out.println(a);
  13. // 注意:在一行可以定义多个相同类型的变量
  14. int a1 = 10, a2 = 20, a3 = 30;
  15. System.out.println(a1);
  16. System.out.println(a2);
  17. System.out.println(a3);
  18. }
  19. }

如下所示:

40edb313a7d2421bad5882c135a75818.png


3.2变量的命名规则

变量的命名需要遵循一定的规则,变量名必须由字母、数字、下划线或美元符号组成,不能以数字开头,且不能是Java的关键字。

  1. int myNumber; // 正确的变量名
  2. double $price; // 正确的变量名
  3. char _firstChar; // 正确的变量名
  4. boolean isOK; // 正确的变量名
  5. String 1stString; // 错误的变量名,不能以数字开头

3.3变量的作用域

变量的作用域是指变量在程序中可访问的范围,Java中的变量具有作用域,即变量只在声明它的代码块中可见。

  1. public void foo() {
  2. int a = 10; // 只在foo()方法中可见
  3. if (a > 5) {
  4. int b = 20; // 只在if语句块中可见
  5. }
  6. System.out.println(a); // 可以访问变量a
  7. System.out.println(b); // 错误,无法访问变量b
  8. }

3.4变量的被final修饰

在Java中,变量还可以被final修饰,表示该变量是一个常量,一旦赋值就不能再被改变。

  1. final int a = 10; // 声明一个常量a,不能再被改变
  2. final double PI = 3.14; // 声明一个常量PI,不能再被改变

四.类型转换

4.1什么是类型转换?

Java 作为一个强类型编程语言 , 当不同类型之间的变量相互赋值的时候 , 会有较严格的校验 .

  1. int a = 10;
  2. long b = 100L;
  3. b = a; // 可以通过编译
  4. a = b; // 编译失败

在 Java 中,当参与运算数据类型不一致时,就会进行类型转换。 Java 中类型转换主要分为两类:自动类型转换 (隐式)强制类型转换 (显式)

自动类型转换

4.2自动类型转换

代码不需要经过任何处理,在代码编译时,编译器会自动进行处理特点: 数据范围小的转为数 据范围大的时会自动进行

如下代码:

  1. System.Out.println(1024); // 整型默认情况下是int
  2. System.Out.println(3.14); // 浮点型默认情况下是double
  3. int a = 100;
  4. long b = 10L;
  5. b = a; // a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值
  6. a = b; // 编译报错,long的范围比int范围大,会有数据丢失,不安全
  7. float f = 3.14F;
  8. double d = 5.12;
  9. d = f; // 编译器会将f转换为double,然后进行赋值
  10. f = d; // double表示数据范围大,直接将float交给double会有数据丢失,不安全
  11. byte b1 = 100; // 编译通过,100没有超过byte的范围,编译器隐式将100转换为byte
  12. byte b2 = 257; // 编译失败,257超过了byte的数据范围,有数据丢失

4.3强制类型转换

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。

如下代码:

  1. int a = 10;
  2. long b = 100L;
  3. b = a; // int-->long,数据范围由小到大,隐式转换
  4. a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
  5. float f = 3.14F;
  6. double d = 5.12;
  7. d = f; // float-->double,数据范围由小到大,隐式转换
  8. f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败
  9. a = d; // 报错,类型不兼容
  10. a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃
  11. byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
  12. byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错
  13. boolean flag = true;
  14. a = flag; // 编译失败:类型不兼容
  15. flag = a; // 编译失败:类型不兼容

4.4注意事项

  1. 不同数字类型的变量之间赋值 , 表示范围更小的类型能隐式转换成范围较大的类型

  2. 如果需要把范围大的类型赋值给范围小的 , 需要强制类型转换 , 但是 可能精度丢失

  3. 将一个字面值常量进行赋值的时候 , Java 会自动针对数字范围进行检查

  4. 强制类型转换不一定能成功,不相干的类型不能互相转换


4.5类型提升

什么是类型提升?

不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。

如下所示

  1. int**long之间:int会被提升为**long

    int a = 10;
    long b = 20;
    int c = a + b; // 编译出错: a + b==》int + long—> long + long 赋值给int时会丢失数据
    long d = a + b; // 编译成功:a + b==>int + long—->long + long 赋值给long


  1. byte byte 的运算

    byte a = 10;
    byte b = 20;
    byte c = a + b;
    System.out.println(c);

    // 编译报错
    Test.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失
    byte c = a + b;

    1. ^

解析:

byte 和 byte 都是相同类型 , 但是出现编译报错 . 原因是 , 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算 , 得到的结果也是 int, 这是赋给 c, 就会出现上述错误 .

由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据 . 为了硬件上实现方便 , 诸如 byte 和 short 这种低于 4 个字节的类型 , 会先提升成 int, 再参与计算。

正确的写法:

  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 , 再运算.


五.字符串类型

5.1什么是Java字符串类型?

在 Java 中,字符串是一个对象,它是由一系列字符组成的,可以包含字母、数字、符号等。Java 字符串类型是不可变的,这意味着一旦创建了一个字符串对象,就不能对其进行更改。如果需要修改一个字符串,需要创建一个新的字符串对象。

5.2如何创建和使用字符串?

要创建一个字符串对象,可以使用字符串字面量或字符串构造函数。字符串字面量是由一对双引号括起来的字符序列,例如:

  1. String str1 = "Hello, World!";

字符串构造函数可以通过传递一个字符数组或另一个字符串来创建一个新的字符串对象,例如:

  1. char[] charArray = {'H', 'e', 'l', 'l', 'o'};
  2. String str2 = new String(charArray);
  3. String str3 = new String("Hello");

访问字符串中的字符,可以使用字符索引或字符串方法。例如,要获取字符串中的第一个字符,可以使用以下代码:

  1. String str1 = "Hello, World!";
  2. char firstChar = str1.charAt(0);

5.3常见的字符串操作

Java 提供了许多用于操作字符串的方法,包括以下几个常见的例子:

字符串比较

要比较两个字符串是否相等,可以使用 equals() 方法,例如:

  1. String str4 = "Hello";
  2. boolean isEqual = str3.equals(str4); // true

字符串连接

可以使用加号运算符或 concat() 方法将两个字符串连接起来,例如:

  1. String str5 = "Hello";
  2. String str6 = "World";
  3. String str7 = str5 + " " + str6; // "Hello World"
  4. String str8 = str5.concat(" ").concat(str6); // "Hello World"

字符串长度

可以使用 length() 方法获取字符串中字符的数量,例如:

  1. int length = str1.length(); // 13

字符串截取

可以使用 substring() 方法获取字符串的一个子串,例如:

  1. String subStr = str1.substring(0, 5); // "Hello"

字符串转换

可以使用将toUpperCase() 和 toLowerCase() 方法字符串转换为大写或小写形式,例如:

  1. String str9 = "Hello";
  2. String str10 = str9.toUpperCase(); // "HELLO"
  3. String str11 = str9.toLowerCase(); // "hello"

5.3字符串与不同类型之间的转换

字符串转换为整数

可以使用Integer.parseInt() 方法将字符串转换为整数。例如:

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

字符串转换为浮点数

可以使用Double.parseDouble() 方法将字符串转换为浮点数。例如:

  1. String str = "3.14";
  2. double num = Double.parseDouble(str);

整数或浮点数转换为字符串

可以使用 String.valueOf() 方法将整数或浮点数转换为字符串。例如:

  1. int num = 123;
  2. String str1 = String.valueOf(num);
  3. double num2 = 3.14;
  4. String str2 = String.valueOf(num2);

字符串转换为字符数组

可以使用 toCharArray() 方法将字符串转换为字符数组。例如:

  1. String str = "Hello";
  2. char[] charArray = str.toCharArray();

字符数组转换为字符串

可以使用 String(char[] data)构造函数将字符数组转换为字符串。例如:

  1. char[] charArray = {'H', 'e', 'l', 'l', 'o'};
  2. String str = new String(charArray);

好了,到这里就结束了,如果有什么错误的地方请在评论区指出,谢谢。

创作不易,如果可以的的话,请大家多三连支持一下下。五条老师会很赞同的

d03459c8ad12449387407e403f6fbc28.png

发表评论

表情:
评论列表 (有 0 条评论,46人围观)

还没有评论,来说两句吧...

相关阅读