当前位置:编程学习 > JAVA >>

java系列之 原生数据类型

在我看来,java里面里面除了原生类型不是对象,其他的都是对象。但java是面向对象的语言,很多地方还要要操作对象,所以java会自动把原生类型转为对应的包装类型。这个过程叫自动装箱。有装箱就有拆箱,就是包装的对象转换为原生类型。

 


java里面一共有8种原生数据类型。

 


类型 占字节大小  
boolean ?  
byte 8位有符号的二进制补码整数  
char 单个16 位Unicode 字符  
short 16位有符号的补码整数  
int 32位有符号的补码整数  
float 单精度 32 位 IEEE 754 浮点数  
long 64位有符号的补码整数  
double 单精度 64 位 IEEE 754 浮点数  


自然对应自动装箱后就是Boolean, Byte, Character, Short, Integer, Float, Long, Double。我们可以用包装类来了解一下类型的细节。

 


大家是否觉得奇怪,boolean的大小是?,是未确定的。(很多人是以为1位)。以下是网上搜索的定义


[html] 
<SPAN style="FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 12px">使用此数据作为简单标记来跟踪真/假条件。这种数据类型代表一个比特的信息,但它的“大小”没有明确界定。</SPAN> 

使用此数据作为简单标记来跟踪真/假条件。这种数据类型代表一个比特的信息,但它的“大小”没有明确界定。
下面我们来代码来答应相关的细节。


[java] 
package cn.xiaowenjie; 
 
public class BasicTypeDemo 

    public static void main(String[] args) 
    { 
        System.out.println("Boolean:没有size属性"); 
        System.out.println("Byte: size:" + Byte.SIZE + ", Max:" + Byte.MAX_VALUE + ", Min:" + Byte.MIN_VALUE); 
        System.out.println("Character: size:" + Character.SIZE + ", Max:" + Character.MAX_VALUE + ", Min:" 
                        + Character.MIN_VALUE); 
        System.out.println("Short: size:" + Short.SIZE + ", Max:" + Short.MAX_VALUE + ", Min:" + Short.MIN_VALUE); 
        System.out.println("Integer: size:" + Integer.SIZE + ", Max:" + Integer.MAX_VALUE + ", Min:" 
                        + Integer.MIN_VALUE); 
        System.out.println("Float: size:" + Float.SIZE + ", Max:" + Float.MAX_VALUE + ", Min:" + Float.MIN_VALUE); 
        System.out.println("Long: size:" + Long.SIZE + ", Max:" + Long.MAX_VALUE + ", Min:" + Long.MIN_VALUE); 
        System.out.println("Double: size:" + Double.SIZE + ", Max:" + Double.MAX_VALUE + ", Min:" + Double.MIN_VALUE); 
    } 
 

package cn.xiaowenjie;

public class BasicTypeDemo
{
    public static void main(String[] args)
    {
        System.out.println("Boolean:没有size属性");
        System.out.println("Byte: size:" + Byte.SIZE + ", Max:" + Byte.MAX_VALUE + ", Min:" + Byte.MIN_VALUE);
        System.out.println("Character: size:" + Character.SIZE + ", Max:" + Character.MAX_VALUE + ", Min:"
                        + Character.MIN_VALUE);
        System.out.println("Short: size:" + Short.SIZE + ", Max:" + Short.MAX_VALUE + ", Min:" + Short.MIN_VALUE);
        System.out.println("Integer: size:" + Integer.SIZE + ", Max:" + Integer.MAX_VALUE + ", Min:"
                        + Integer.MIN_VALUE);
        System.out.println("Float: size:" + Float.SIZE + ", Max:" + Float.MAX_VALUE + ", Min:" + Float.MIN_VALUE);
        System.out.println("Long: size:" + Long.SIZE + ", Max:" + Long.MAX_VALUE + ", Min:" + Long.MIN_VALUE);
        System.out.println("Double: size:" + Double.SIZE + ", Max:" + Double.MAX_VALUE + ", Min:" + Double.MIN_VALUE);
    }

}
输出结果:


[plain] 
Boolean:没有size属性 
Byte: size:8, Max:127, Min:-128 
Character: size:16, Max:【不可见】, Min:【不可见】 
Short: size:16, Max:32767, Min:-32768 
Integer: size:32, Max:2147483647, Min:-2147483648 
Float: size:32, Max:3.4028235E38, Min:1.4E-45 
Long: size:64, Max:9223372036854775807, Min:-9223372036854775808 
Double: size:64, Max:1.7976931348623157E308, Min:4.9E-324 

Boolean:没有size属性
Byte: size:8, Max:127, Min:-128
Character: size:16, Max:【不可见】, Min:【不可见】
Short: size:16, Max:32767, Min:-32768
Integer: size:32, Max:2147483647, Min:-2147483648
Float: size:32, Max:3.4028235E38, Min:1.4E-45
Long: size:64, Max:9223372036854775807, Min:-9223372036854775808
Double: size:64, Max:1.7976931348623157E308, Min:4.9E-324


有几点要注意


Boolean类型没有size属性,所以说大小是未定的。
JAVA里面的类型都是带符号的,而且是所有平台都是一样的长度。
Character类型的最大最小值的定义是


[java]
public static final char   MIN_VALUE = '\u0000'; 
public static final char   MAX_VALUE = '\uffff'; 

    public static final char   MIN_VALUE = '\u0000';
    public static final char   MAX_VALUE = '\uffff';所以char类型是可以指定中文的,如


[java] 
char c1 = 'a'; 
char c2 = '我'; 

        char c1 = 'a';
        char c2 = '我';

 

还有一点疑问:为什么Integer和Float都是32位的,float的最大值比int的最大值大这么多?3.4028235E38是科学计数法,远远大于2147483647。答案就是一个是32位有符号的补码整数,一个是32 位 的单精度 IEEE 754 浮点数。但我不知道这有什么区别,烦知道的大拿不吝赐教。这2个东西有什么不一样,内存里面存放是如何的。

 

原生类型的特性(优势):


存放位置是放在栈里面,不需要用到堆,存储比较快。
不可变,包括包装类都是不可变的(全部是final)。

不可变的意思是说内存里面的值一旦被设置后就不会改变,如果要改变就会另外开辟一个位置存放新的值,但旧的值还在。如


       [java] 
int i1 = 1; 
int i2 = 1; 
i2 = 2; 

 int i1 = 1;
 int i2 = 1;
 i2 = 2;


第1,2行里面,i1和i2是一样的值,他们实际是指向同一个内存空间(虽然2个变量,实际一个空间),第2行i2修

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,