美文网首页
Java的数据类型

Java的数据类型

作者: 粗旷的码农 | 来源:发表于2017-03-29 13:57 被阅读0次

    Java的数据类型包含基础数据类型、引用数据类型两大类。</br>


    一、四大类八个基础数据类型

    Java语言提供了八种基本类型。四种数字类型(四个整数型(默认是int 型),两个浮点型(默认是double 型)),一种字符类型,还有一种布尔型。

    1、byte:

    byte数据类型是8位、有符号的,以二进制补码表示的整数,占1字节。取值区间-128(-27)~127(27-1)),默认值是0,对应的Java引用类型是java.lang.Byte。

    byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一。

    例子:byte a = 100,byte b = -50。

    2、short:

    short数据类型是16位、有符号的以二进制补码表示的整数,占2字节。取值范围-32768(-215)~32767(215 - 1),默认值是0,对应的Java引用数据类型java.lang.Short。

    short数据类型也可以像byte那样节省空间。一个short变量是int型变量所占空间的二分之一。

    例子:
    short s = 1000,short r = -20000。
    short s = 1;s+=1;(正确,s+=1 ==> s=(short)(s+1))
    short s = 1;s =s+1;(错误,s+1会被强制转换为int类型,而s是一个short类型,故错误)

    3、int:

    int数据类型是32位、有符号的以二进制补码表示的整数,占4字节,取值范围-2,147,483,648(-231)~2,147,485,647(231 - 1),整型变量默认为int类型,默认值是0,对应的Java引用数据类型java.lang.Integer。

    例子:int a = 100000, int b = -200000。

    4、long:

    long数据类型是64位、有符号的以二进制补码表示的整数,占8字节,取值范围-9,223,372,036,854,775,808(-263)~9,223,372,036,854,775,807(263 -1),这种类型主要使用在需要比较大整数的系统上,默认值是0L,对应的Java引用类型java.lang.Long。

    例子:
    long a = 100000L,int b = -200000L。
    long a=111111111111111111111111(错误,整数型变量默认是int型)
    long a=111111111111111111111111L(正确,强制转换)

    5、float:

    float数据类型是单精度、32位、符合IEEE 754标准的浮点数,占4字节,取值范围1.40129846432481707E-45f ~ 3.40282346638528860E38f,浮点数是有舍入误差的,float在储存大型浮点数组的时候可节省内存空间,默认值是0.0f,对应的Java引用类型java.lang.Float。

    例子:
    float f1 = 234.5f。
    float f=6.26(错误 浮点数默认类型是double类型)
    float f=6.26F(转换正确,强制)

    6、double

    double数据类型是双精度、64位、符合IEEE 754标准的浮点数,占8字节,
    浮点数的默认类型为double类型,取值范围 4.9E-324 ~ 1.7976931348623157E+308 ,默认值是0.0,对应的Java引用类型java.lang.Double</br>
    例子:
    double d1 = 123.4。
    float f=6.26(错误 浮点数默认类型是double类型)

    7、boolean:

    boolean数据类型表示一位的信息,只有两个取值:true和false,这种类型只作为一种标志来记录true/false情况,默认值是false,对应的Java引用类型java.lang.Boolean

    例子:boolean one = true。

    8、char:

    char类型是一个单一的16位Unicode字符,用 ‘ ’表示一个字符。java 内部使用Unicode字符集。他有一些转义字符 ,占2字节,取值范‘\u0000’~’\uffff’,默认值’/u0000‘,对应的Java引用类型java.lang.Character

    例子:
    char a = 'a';</br>

    二、引用数据类型

    引用数据类型主要包含class、interface、数组等等。

    引用数据类型和基础数据类型的区别:

    基础数据类型保存在栈中,保存的是实际值,引用数据类型也保存在栈中,保存的是一个实际对象地址,将具体的内容保存在堆中;它们占用空间大小和存取速度不同;当引用类型和原始类型用作某个类的实例数据时所指定的缺省值,对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关;当传递方法参数类型为引用数据类型时,一个方法将修改一个引用数据类型的参数所指向对象的值,当传递方法参数类型为基本数据类型(数字以及布尔值)时,一个方法是不可能修改一个基本数据类型的参数。</br>

    三、案例

    public class JavaLearnOne {
        public static void main(String args[]) {
            int a = 1;
            JavaLearnOne one = new JavaLearnOne();
            one.changeParamsA(a);
            System.out.println("main:" + a);
            CallValue callValue = new CallValue();
            callValue.setA(10);
            System.out.println("callValue:" + callValue.getA());
            one.updateCallValue(callValue);
            System.out.println("callValue update:" + callValue.getA());
        }
    
        public void updateCallValue(CallValue value) {
            value.setA(1000);
        }
    
        public void changeParamsA(int a) {
            a = 1000;
        }
    }
    
    class CallValue {
        private int a;
    
        public void setA(int a) {
            this.a = a;
        }
    
        public int getA() {
            return this.a;
        }
    }
    

    以上输出结果:
    main:1
    callValue:10
    callValue update:1000

    说明:
    当传递方法参数类型为基本数据类型(数字以及布尔值)时,一个方法是不可能修改一个基本数据类型的参数(传递的是值副本),因此在changeParamsA中修改的只是参数值的副本,java程序设计语言是采用了按值调用,即call by value。也就是说方法得到的是所有参数值的一个拷贝,方法并不能修改传递给它的任何参数变量的内容。

    当传递方法参数类型为引用数据类型时,一个方法将修改一个引用数据类型的参数所指向对象的值。案例中的执行过程:
    1、对象执行updateCallValue方法时,value被初始化为callValue的拷贝
    2、调用value的setA方法是,value和callValue的CallValue对象同时被修改。
    3、方法结束后,value将不会再使用,被释放,而callValue继续使用,没有变化,依然指向CallValue对象。

    相关文章

      网友评论

          本文标题:Java的数据类型

          本文链接:https://www.haomeiwen.com/subject/hameottx.html