JavaSE基础语法 - 数据类型

JavaSE基础语法 - 数据类型

记录自己的学习之路,2025年7月20日,周日,晚,天气台风。数据类型学习。

强弱类型语言

  • 强类型语言:类型检查严格,变量的类型在声明后不能随意改变,适合大型项目和需要严格类型安全的场景。
  • 弱类型语言:类型检查较为宽松,变量的类型可以随时改变,适合快速开发和脚本编写,但需要开发者更加小心处理类型相关的逻辑。

强类型语言:Java、Python(3.x)、C++、C#、Typescript

弱类型语言:PHP、Javascript、Ruby、Perl、Bash(Shell脚本)

Java是一种静态强类型语言。在Java中,变量的类型在声明时必须明确指定,并且一旦声明,变量的类型不能改变。例如:

int number = 10; // 声明一个整型变量
number = "Hello"; // 这会报错,因为类型不匹配

Python是一种动态强类型语言。虽然变量的类型在运行时确定,但Python的类型检查依然严格。如果尝试对不同类型进行不兼容的操作,会抛出错误。例如:

number = 10
number = "Hello"  # 这是合法的,因为Python是动态类型语言
result = 10 + "20"  # 这会抛出TypeError

JavaScript是一种动态弱类型语言。变量的类型在运行时确定,并且可以随时改变。JavaScript的类型转换非常灵活,但这也可能导致一些类型相关的错误。例如:

let value = 10; // value是数字类型
value = "Hello"; // value现在是字符串类型
let result = 10 + "20"; // 结果是"1020",而不是30

数据类型

  • 基本数据类型(4+2+1+1,8种类型)

    byte:1个字节,整数类型

    short:2个字节,整数类型

    int:4个字节,整数类型

    long:8个字节,整数类型

    float:4个字节,浮点类型

    double:8个字节,浮点类型

    char:2个字节,字符类型

    boolean:1个字节,值只有true和false

  • 引用数据类型

    类(如String)、接口、数组

    查看基本数据类型的取值范围

    虽然 byte 是基本数据类型,但 Java 提供了一个对应的包装类 Byte。可以查看 Byte 类的源代码来了解一些与 byte 相关的常量和方法。int、char、boolean等类型同理。

image-20250720214243198

  • 示例

    public static void main(String[] args) {
        //整型
        int i1=100;
        //长整型
        long i2=998877665544332211L;//要在最后加个L,表示是长整型
        //短整型
        short i3=235;
        //浮点型
        double d1=3.5; //双精度
        double d2=3;
        float f1=(float)3.5; //单精度
        float f2=3.5f; //要在最后加个f,表示是单精度
        //布尔类型 boolean true真/false假
        boolean isPass=true;
        boolean isOk=false;
        boolean isBig=5>8;
        if(isPass){
            System.out.println("通过了");
        }else{
            System.out.println("未通过");
        }
        //单字符,不能是两个字符,如char f='女人',则会报错
        char f='女';
        char m='男';
    }
    

    整型拓展

    进制:二进制0b、八进制0、十进制、十六进制0x

    示例:

    //整型
    int i=10;
    int i2=010;
    int i3=0x10;
    System.out.println(i); //10
    System.out.println(i2); //8
    System.out.println(i3); //16
    

    浮点型拓展

    浮点类型float, double的数据不适合在不容许舍入误差的金融计算领域。

    如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。

    public static void main(String[] args) {
        
        //单精度的1.0不等于双精度的1.0
        float f = 0.1f;
        double d = 1.0/10;
        System.out.println(f==d); //false
        
        //超出范围,+1仍显示相等
        float d1 = 2131231231f;
        float d2 = d1+1;
        if(d1==d2){
            System.out.println("d1==d2");
        }else{
            System.out.println("d1!=d2");
        }
    }
    

    最好完全避免使用浮点数比较 !

    大数值:Java.math下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数

    值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。

    字符型拓展

    char 类型用来表示在Unicode编码表中的字符。本质都是一些数字。

    public static void main(String[] args) {
        char c1 = 'a';
        char c2 = '中';
        System.out.println(c1);
        System.out.println((int) c1); //97
        System.out.println(c2);
        System.out.println((int) c2); //20013
    }
    
    char c3 = '\u0061';
    System.out.println(c3); //a
    
    • 转义字符

转义字符

布尔型拓展

boolean falg = ture;
if (falg = true) {}//新手写法
if (falg) {}//老手写法
//代码要精简

字符串String类拓展

//代码1
String sa=new String("Hello world");
String sb=new String("Hello world");
System.out.println(sa==sb); // false
//代码2
String sc="Hello world";
String sd="Hello world";
System.out.println(sc==sd); // true

代码1:

  • 使用new String()创建字符串时,Java会创建一个新的String对象,即使内容相同,也会分配新的内存空间。
  • 在代码中,sasb虽然内容都是"Hello world",但它们是通过new String()分别创建的两个独立的String对象。
  • 因此,sasb指向的是不同的内存地址。
  • 在Java中,==运算符用于比较两个对象的内存地址是否相同。
  • 由于sasb指向的是不同的对象,因此sa == sb的结果是false

代码2:

  • 当使用双引号直接赋值字符串时(例如"Hello world"),Java会使用字符串常量池(String Pool)。
  • 字符串常量池是一个特殊的内存区域,用于存储字符串常量,以避免重复创建相同内容的字符串对象。
  • 如果字符串常量池中已经存在内容为"Hello world"的字符串对象,那么sc会直接引用这个已存在的对象,而不会创建新的对象。
  • 由于scsd都引用了字符串常量池中的同一个对象,它们的内存地址相同。
  • 因此,sc == sd的结果是true
posted @ 2025-07-20 22:17  点态  阅读(18)  评论(0)    收藏  举报