• Java基础4-变量和数据类型(基本数据类型间转换)


    一、变量

    1.什么是变量?

    *变量本质上说是内存中的一块空间,这块空间有数据类型,有名字,有字面值
    *变量包含三部分:数据类型、名称、字面值【数据】
    *变量是内存中存储数据的最基本的单元

    内存空间得到了重复使用

    定义变量的格式:

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

    public class variable
    {
        public static void main(String[] args){
            int j=100;
    //数据类型:int    变量名:j   字面值为:100 
            System.out.println(j);
        }
    }

    2.变量的分类

    变量分为局部变量、成员变量

    在方法体外【类体之内】声明的变量 称为成员变量。

    在方法体中中声明的变量为局部变量。

    public class variable
    {
            int c;
    // c为成员变量,在类体中声名,成员变量默认赋值
        public static void main(String[] args){
            int i;
            //变量i为局部变量,在方法体中声明,要赋值初始化否则
            //编译报错:变量i没有初始化
            i=100;
                    //声明的变量可以重复赋值
                for(int i=0;i<10;i++){
                  //在不同作用域中变量名可以相同
                 //java遵循就近原则
                 System.out.println(i);
                }
            System.out.println(i);
        }
    }                    

    3.什么是作用域?

    *变量的作用域描述的就是变量的有效范围

    *在什么范围内可以被访问,出了这个范围不能访问
    *变量作用域只要记住一句话:出了大括号就不认识了。

    public class variable
    {
            int c;
    // c为成员变量,作用域为整个类
        public static void main(String[] args){
            int i;
            //变量i为局部变量,作用域为主方法中
            i=100;
                    //声明的变量可以重复赋值
                for(int i=0;i<10;i++){
                  //在这个for循环中变量i只在这个循环中作用
                 //java遵循就近原则,这里打印输出for循环中定义的i
                 System.out.println(i);
                }
    //这里打印输出主方法中声明的i 因为for循环中声明的i出了for循环这个作用域就无法访问到了
            System.out.println(i);
        }
    }   

    二、数据类型

    1.数据类型的种类

    数据类型主要分为:基本数据类型和引用数据类型两种

    ①基本数据类型(8种):

    a数值型:

    *整数型:(byte/short/int/long)

    *浮点型:(float/double)

    b字符型:char

    c布尔型:boolean

    ②引用数据类型

    *类

    *数组

    *接口

    2.八种基本数据类型范围

    NO.

    数据类型

    大小/

    可表示范围

    默认值

    1

    byte(字节)

    8

    -128~127

    0

    2

    short(短整型)

    16

    -32768~32767

    0

    3

    int(整型)

    32

    -2147483648~2147483647

    0

    4

    long(长整型)

    64

    -9223372036854775808~9223372036854775807

    0

    5

    float(单精度)

    32

    -3.4E38~3.4E38

    0.0

    6

    double(双精度)

    64

    -1.7E308~1.7E308

    0.0

    7

    char(字符)

    16

    0~255

    ‘u0000’

    8

    boolean(布尔)

    -

    true false

    false

    3.数据类型的作用

    *不同的数据有不同的类型,不同的数据类型底层会分配不同大小的空间
    *数据类型是指导程序在运行阶段应该分配多大的内存空间。

    4.java语言中的整数型

    *java语言中,整数型字面值被默认当做int类型来处理。
    要让整数型字面值被当做long类型来处理,需要在整数型字面值后面添加l/L,建议使用大写L

    ①java语言中整数型常量有三种表示方式

    • 10进制
    • 8进制,8进制以0开头,例如:012.
    • 16进制,16进制以0x开头,例如:0x123.

    5.基本数据类型之间的转换

    1.除布尔类型外其他7种可以互相转换
    2.小容量向大容量转换,自动类型转换
    byte<short<int<long<float<double
             char<
    注:任何浮点类型不管占用多少个字节,都比整数型容量大。
    char和short可表示的种类数量相同,但是char可以取更大的正整数
    3.大容量转换成小容量,叫做强制类型转换需要加强制类型转换符,程序才能编译通过,但是运行阶段会损失精度
    4.当整数字面值没有超出byte,short,char的取值范围,可以直接赋值给byte,short,char
    5.byte,short,char混合运算的时候,各自先转换成int类型再做运算
    6.多种数据类型混合运算,先转换成容量最大的那种类型再做运算。

    class note05
    {
        public static void main(String[] args){
        long x=456;
        //456整数型字面值被当做int类型
        //x变量在声明时是long类型,占用8个字节
        //int类型的字面值456赋值给long类型的变量x,存在类型转换
        //从小容量转换成大容量自动转换
        System.out.println(x);
        long y=2147483647;
        //2147483648被当做int类型,4个字节,但是字面值超过int类型范围需在后边加L
        //2147483648L是8个字节的long类型
        long z=2147483648L;
        System.out.println(z);
        long v=100L;
        //100L是long类型字面值,v是long类型变量,不存在数据类型转换直接赋值
        //int o=v;
        //从大容量转到小,不能直接赋值给小容量,所以int o=v不可以
            int o=(int)v;
        //需要强制类型转换,需要加强制类型转换符将v转换成int类型再赋值给int类型的o
        //加上强制类型转换符编译可通过,但运行阶段可能损失精度
        //强转原理:
        //原始数据:0000000 00000000 00000000 00000000 00000000 00000000 00000000 00100100
        //强转之后的数据:00000000 00000000 00000000 00100100
        //将左边的二进制砍掉,【所有数据都是这样完成的】
        byte p=50;
        //没有超出byte类型取值范围的话,该字面值可以直接赋值给byte类型的变量。
        /*关于浮点型数据类型
        float 单精度【4个字节】
        double 双精度【8个字节,精度较高】
        double精度太低【相对来说】,不适合做财务软件。
        涉及到财务,要求精度较高,所以sun在基础se类库中准备了精度更高的类型,是一种引用数据类型
        它是:java.math.BigDecimal(欲知后事,请持续关注)
        java程序中sunsun提供了一套庞大的类库,java程序员是基于这套基础的类库来进行开发的
        在java语言中,所有的浮点型字面值,默认被当作double类型来处理,
        要想该字面值以float类型来处理,需要在字面值后面添加F/f
        注意:
        double和float在计算机内部二进制存储的时候都是近似值。
        */
             double d=3.0;
        //3.0是double类型的字面值
        //d是double类型
        //不存在数据转换
        System.out.println(d);
        //5.1是double类型的字面值
        //f是float类型的变量
        //大容量转换成小容量需要加强制类型转换符,所以以下程序编译错误
        //解决方案
        //float f=float(5.1);
        //第二种方式:没有类型转换
        float f=5.1;
        }
    }

    附常见基本数据类型转换的错误和注意点

    class note06
    {
        */
        //出现错误,1000超出了byte的范围
    //byte a = 1000;
    //正确,因为20没有超出byte范围
    //所以赋值
    byte a = 20;
    //变量不能重名
    //short a = 1000;
    //正确,因为数值1000没有超出short类型的范围
    //所以赋值正确
    short b = 1000;
    //正确,因为默认就是int,并且没有超出int范围
    int c = 1000;
    //正确,可以自动转换
    long d = c;
    //错误,出现精度丢失问题,大类型-->>小类型会出现问题
    //int e = d;
    //将long强制转换成int类型
    //因为值1000,没有超出int范围,所以转换是正确的
    int e = (int)d;
    //因为java中的运算会会转成最大类型
    //而10和3默认为int,所以运算后的最大类型也是int
    //所以是正确的
    int f = 10/3;
    //声明10为long类型
    long g = 10;
    //出现错误,多个数值在运算过程中,会转换成容量最大的类型
    //以下示例最大的类型为double,而h为int,所以就会出现大类型(long)到小类型(int)
    //的转换,将会出现精度丢失问题
    //int h = g/3;
    //可以强制转换,因为运算结果没有超出int范围
    //int h = (int)g/3;
    //可以采用long类型来接收运算结果
    //long h = g/3;
    //出现精度损失问题,以下问题主要是优先级的问题
    //将g转换成int,然后又将int类型的g转换成byte,最后byte类型的g和3运算,那么
    //它的运算结果类型就是int,所以int赋值给byte就出现了精度损失问题
    //byte h = (byte)(int)g/3;
    //正确
    //byte h = (byte)(int)(g/3);
    //不能转换,还有因为优先级的问题
    //byte h = (byte)g/3;
    //可以转换,因为运算结果没有超出byte范围
    //byte h = (byte)(g/3);
    //可以转换,因为运算结果没有超出short范围
    short h = (short)(g/3);
    short i = 10;
    byte j = 5;
    //错误,short和byte运算,首先会转换成int再运算
    //所以运算结果为int,int赋值给short就会出现精度丢失问题
    //short k = i + j;
    //可以将运算结果强制转换成short
    //short k = (short)(i + j);
    //因为运算结果为int,所以可以采用int类型接收
    int k = i + j;
    char l = 'a';
    System.out.println(l);
    //输出结果为97,也就是a的ascii值
    System.out.println((byte)l);
    int m = l + 100;
    //输出结构为197,取得a的ascii码值,让后与100进行相加运算
    System.out.println(m);
        
        }
    }
    数据类型转换

    6.String字符砖类型

    String字符串类型不属于基本数据类型,它是一个类,属于引用数据类型,

    本质是一个字符类型的数组 char[] value={};以后再说。

    String型的使用需要双引号""

    String a="你好美女";

    char b='国';

    一个中文占用2个字节,char正好是占用两个字节。

  • 相关阅读:
    Java序列化与反序列化
    Java中的反射机制
    Java中读文件操作
    Java中写文件操作
    判断单链表是否有环
    Java继承与组合
    Java类初始化
    堆排序
    希尔排序
    插入排序
  • 原文地址:https://www.cnblogs.com/LuckyGJX/p/8723054.html
Copyright © 2020-2023  润新知