• java入门篇2---基本数据结构


    学习任何语言,第一步就是学习该门语言的基本数据结构,然后在此基础上进行扩展。

    java的基本数据类型有 int, byte, short, long, float, double, boolean, char,使用类型声明变量然后进行赋值,这个跟c类似, 基本数据类型就是CPU可以直接运算的类型。

    public class HelloWorld {
        public static void main(String[] args) {
            int m = 1;
            System.out.println(m);
        }
    }

    接下来分析一下这个值的传递过程

    public class HelloWorld {
        public static void main(String[] args) {
            int m = 1;
            int x = m;
            x = 100;
            System.out.println(m);  // 1
            System.out.println(x);  // 100
        }
    }

    首先我们可以看到,在对m进行初始化是,JVM在内存中为m分配了一个存储单元,然后存储单元保存的数据是1,接下来x进行初始化时,又会重新分配一个存储单元,并将存储单元对应的数据填入,然后对x进行重新赋值,因此x现在的存储单元对应的值就是100

    首先我么来看一下整型类型,各整型类型所占内存空间如下:

    byte: 1字节,范围:-128~127

    short:2字节,范围:-32768~32767

    int:4字节,范围:-2147483648 ~ 2147483647

    long:8字节,范围:-9223372036854775808 ~ 9223372036854775807

    public class HelloWorld {
    public static void main(String[] args) {
    // long y = 2_147_483_648; // Error:(3, 18) java: 整数太大
    long x = 2_147_483_64;
    long m = 1_000_000_000_000_000L;
    System.out.println(x); // 2147483647
    System.out.println(m); // 1000000000000000
    }
    }

    例如上述在进行定义长整型时,_是为了更方便看清楚这是多大的数字,就是千位分隔符号“,”,另外我们也可以看出,当这个数字范围在int范围之间时,可以不用加后面的L符号,但超出范围之后,必须加上,否则会报错。

    接下来,看一下浮点数 float, double

    float:4字节,最大范围是3.4*10^38

    double:8字节,最大输出可为1.79*10^308

    接下来我们看一下这两种值的赋值情况:

    • float的精度是8位,他只能保留8位有效数值
    • double的精度是17位,他只能保留17位的有效数值
    • float进行赋值时,后面必须跟f否则会报错
    • double后面不需要跟f,如果跟着f就是把float类型数值转化为double类型,因此在用flaot转化为整型的时候,后面会发生变化
    • 而对double来讲,输出格式默认转化位科学技术,并只保留17位有效数值,剩余的会切掉。
    public class HelloWorld {
    public static void main(String[] args) {
    // float x = 1.123456789; // Error:(4, 19) java: 不兼容的类型: 从double转换到float可能会有损失
    float x = 1234.123456789f;
    double y1 = 1234.123456789f;
    double y2 = 1234567890.1234567;
    double y3 = 1234567890.1234567890;
    System.out.println(x); // 1234.1234
    System.out.println(y1); // 1234.1234130859375
    System.out.println(y2); // 1.2345678901234567E9
    System.out.println(y3); // 1.2345678901234567E9
    }
    }

    所以以后想要表示比较大的数值,还是尽量用科学计数把

    布尔类型

    boolean就是true,false或者关系运算的结构,按道理来讲只需要一个字节,但是jvm通常在内部会把boolean表示为4字节整数,java语言对布尔类型存储没有做规定

    public class HelloWorld {
        public static void main(String[] args) {
            boolean x = true;
            boolean y1 = false;
            boolean y2 = 1 > 2;
            boolean y3 = 1 * 2 == 2;
            System.out.println(x); // true
            System.out.println(y1); // false
            System.out.println(y2); // false
            System.out.println(y3); // true
        }
    }

    字符类型

    字符类型声明 char

    char占2个字节,char保存的是unicode字符

    注意声明char类型需要用单引号,注意单引号跟双引号的区别,双引号是字符串类型,另外只能放一个字符,否则就会报错

    public class HelloWorld {
        public static void main(String[] args) {
            char x = '我';
            // char x1 = '我在中国';  // Error:(4, 19) java: 未结束的字符文字
            char y = 'a';
            //char y1 = 'i love china';  // Error:(6, 19) java: 未结束的字符文字
            System.out.println(x);  //
            System.out.println(y);  // a
        }
    }

     常量

    所谓常量就是一旦定义就不能进行更改的值,只需要在定义变量的时候在前面加一个final修饰符

    public class HelloWorld {
        public static void main(String[] args) {
            final char x;
            x = 's';
            // x= 'd';  // Error:(5, 9) java: 可能已分配变量x
            System.out.println(x);  // s
        }
    }

    从例子中也可以看出,常量可以先进行声明,然后再进行赋值,但能且只能赋值一次

    var 关键字

    java提供了var关键字,也就是说你可以不用声明变量的属性,直接var一下,然后编译器就会自动推断出你这个变量的属性

    public class HelloWorld {
        public static void main(String[] args) {
            var x = 1;
            System.out.println(x);  // 1
        }
    }

    变量的作用域,这个就是看你在哪里声明的,js以前还有变量提升,现在也正在逐步废弃,因此这个作用域如果全局声明的就是全局,如果在函数内部,就是函数内部,如果在花括号里面,作用域就是在花括号里,基本所有的编程变量作用域都差不多。

    注意基本类型只有上述提到的这些,对于String,数组属于引用类型,后面在谈

  • 相关阅读:
    Python测试框架:pytest
    用Python unittest搭建自动化测试框架
    unittest单元测试框架
    golang获取本地dns服务器
    Go语言HTTP请求头小写问题
    MAC上使用nginx搭建直播服务器
    go packages 学习
    Cloud Native Computing Foundation
    普通文件I/O需要两次复制,内存映射文件mmap一次复制
    page cache & buffer cache
  • 原文地址:https://www.cnblogs.com/yangshixiong/p/12155679.html
Copyright © 2020-2023  润新知