Java 8种基本数据类型 和 引用数据类型(复杂数据类型)

java中的数据类型分为两种: 基本数据类型和引用数据类型
基本数据类型有8种
引用数据类型,就是class 开头的自定义类,或者包装类

基本数据类型

java基本数据类型就8种,记住就好了。除了这些都是引用型的了。
java四类八种基本数据类型
第一类:整型 byte short int long
第二类:浮点型 float double
第三类:逻辑型 boolean(它只有两个值可取true false)
第四类:字符型 char

数据的存储位置

基本数据类型:其数据保存在栈中,在栈中可以直接分配内存的数据
引用数据类型:其存储需要栈和堆共同完成,在栈中存放地址,该地址指向对应的堆内存中的数据。【因为一般 类数据量太大,所以只能在栈中存放一个地址】
二者存储图示:
二者存储图示

要想学好Java必须知道各种数据的在内存中存储位置。 对内存有了很好的了解,可以有助你分析程序。

基本数据类型自动转换

byte->short,char -> int -> long
float -> double
int -> float
long -> double
记住:小可转大,大转小会失去精度!!!

基本数据类型所占字节个数

boolean 布尔型 1/8
byte 字节类型 1
char 字符型 2 一个字符能存储一个中文汉字
short 短整型 2
int 整数类型 4
float 浮点类型(单精度) 4
long 长整形 8
double 双精度类型(双精度) 8

基本数据类型的取值范围

信息的最小存储单元都是字节

一、分析基本数据类型的特点,最大值和最小值。
在这里插入图片描述
对于 boolean,官方文档未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1 位,但是实际中会考虑计算机高效存储因素。

另外,Java 的每种基本类型所占存储空间的大小不会像其他大多数语言那样随机器硬件架构的变化而变化。这种所占存储空间大小的不变性是 Java 程序比用其他大多数语言编写的程序更具可移植性的原因之一(《Java 编程思想》2.2 节有提到)。
javaguide

1、
基本类型:int 二进制位数:32
范围
-231 <= val <= 231-1
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)
最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)
2、
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768 (-2的15此方)
最大值:Short.MAX_VALUE=32767 (2的15次方-1)
3、
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)
最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1)
4、
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45 (2的-149次方)
最大值:Float.MAX_VALUE=3.4028235E38 (2的128次方-1)
5、
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324 (2的-1074次方)
最大值:Double.MAX_VALUE=1.7976931348623157E308 (2的1024次方-1)

下面的值都是正负。。。我说的是位数的最大值和最小值
float
最大值:3.4028235E38 = 340282350000000000000000000000000000000
最小值:1.4E-45 = 0.0000000000000000000000000000000000000000000014
double
最大值:1.7976931348623157E308这个值太大了就是
1.7976931348623157这个数小数点往右移308位
最小值:4.9E-324
这个数就是4.9除以10的324次方。。。。
Float 最小值 :1.4E-45。
最大值:3.4028235E38。
Double最小值: 1.7976931348623157E308。
最大值:4.9E-324 。

二、经实践证明,在代码中,能够写的位数。
1、首先是整型
int和long只能写10个数字,short只能写5个数字,多了就会报错。

int h=1234567890;
long w=1234567890;
short s=12345;
如果此时我在它们每个上面再加上一个数字,就会:

2、其次浮点
float的小数点后6位,double的小数点后16位。

float m=123.45566778465651454545f;
double n=3.1234567890123456789;
然后打印出来的结果是这样的:

三、小插曲 -----int和Integer的区别

1.从定义上来看
int 是基本类型,直接存数值(类似的还有float、double、String、char)
Integer是对象,用一个引用指向这个对象(类似的有Float、Double、String)
2.从复杂度来看,Java 中的数据类型分为基本数据类型和复杂数据类型
int 是前者;Integer 是后者(也就是一个类)
3.初始化的方式不同
int i =1;
Integer i= new Integer(1);//integer 是一个类
int 是基本数据类型(面向过程留下的痕迹,不过是对java的有益补充);Integer 是一个类,是int的扩展,定义了很多的转换方法
注意:类似的还有:float Float;double Double;String等,其中String较为特殊,基本类型和复杂类似关键字相同。
例如,当需要往ArrayList,HashMap中放东西时,像int,double这种内建类型是放不进去的,因为容器都是装 object的,这是就需要这些内建类型的外覆类了。Java中每种内建类型都有相应的外覆类。
Java中int和Integer关系是比较微妙的。关系如下:
int是基本的数据类型;
Integer是int的封装类;
int和Integer都可以表示某一个数值;
int和Integer不能够互用,因为他们两种不同的数据类型;
举例说明

   ArrayList A_List=new ArrayList();
   int n=40;
   Integer In=new Integer(n);
   A_List.add(n);//error
   A_List.add(In);//ok

bit 比特 是 二进位制信息单位,即0,1

然后看8种基本类型

整型

byte 1字节 8位元组,即8位bit, 可存储-28~27 (-128 ~ 127)

short 2字节 2*8 = 16 bit -216~215 (-32768 ~ 32767)

int 4字节 4*8 = 32 bit -232~231 (-2147483648 ~ 2147483647)

long 8字节 8*8 = 64 bit -264~263 (-18446744073709551616 ~ 18446744073709551615)

浮点型

float 4字节 4*8 = 32 bit -232~231 (-2147483648 ~ 2147483647)

double 8字节 8*8 = 64 bit -264~263 (-18446744073709551616 ~ 18446744073709551615)

字符型

char 2字节 2*8 = 16 bit 英文字符所占字节 2,中文字符根据编码不同

布尔型

boolean 1字节 8bit true|false

备注:

GBK编码,一个汉字占两个字节。

UTF-16编码,通常汉字占两个字节,CJKV扩展B区、扩展C区、扩展D区中的汉字占四个字节(一般字符的Unicode范围是U+0000至U+FFFF,而这些扩展部分的范围大于U+20000,因而要用两个UTF-16)。

UTF-8编码是变长编码,通常汉字占三个字节,扩展B区以后的汉字占四个字节。

Java不受系统32或者64位影响,所有类型占字节数都固定,不同于c,会有int32,int64。
————————————————
版权声明:本文为CSDN博主「zander_2016」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/caonidayeheixiu8/article/details/78423307

java中long和int的区别

java中long和int都属于整型,为什么还要细分为long和int两种数据类型呢?这是因为它们代表的大小不一样。具体区别如下:

1、区别1

16位系统:long是4字节,int是2字节

32位系统:long是4字节,int是4字节

64位系统:long是8字节,int是4字节

2、区别2

long和int的区别就是他们的占位长度不同 其中long是64位、而int是32位

3、区别3

int: 32位整数 -2,147,483,648——2,147,483,647,一般来说整数都够用了

long: 64位整数 -9,223,372,036,854,775,808—— 9,223,372,036,854,775,807,一般不需要用

补充:

Java的数据类型分两种:

1.基本类型:long,int,byte,float,double,char

对象类型(类): Long,Integer,Byte,Float,Double,Char,String,
其它一切java提供的,或者你自己创建的类。
其中Long又叫 long的包装类。而Byte和Float也类似,一般包装类的名字首写是数值名的大写开头。

java中默认的整数类型是int类型,如果要定义为float型,则要在数值后加上l或L;
默认的浮点型也是双精度浮点,如果要定义为float型,则要在数值后加上f或F。
一个字节等于8位,一个字节等于256个数,就是-128到127一共256。
kB就是kBytes Bytes就是“字节”的意思!
K就是千的意思,因为计算机是通过二进制来计算,10个1正好是1024
1111111111(二进制)=1024(十进制)
1Bytes(字节)=8bit(比特)
一个英文字母或一个阿拉伯数字就是一个字符,占用一个字节
一个汉字就是两个字符,占用两个字节。
一般讲大小是用Bytes,大写的“B”,讲网络速率是用bit,注意是小写的“b”。
例:一个文件有8MBytes
例:我下载文件的速率是256KB/s,即2Mbit,这通常就是我们宽带上网的速率。

long和int 的区别:

64位系统中,long是8字节,int是4字节

long允许的数字范围要更广

在这里插入图片描述

char字符类型

char 类型 只能存放单个字符或字符常量( ASCII 值)

ASCII码
char类型的相加减或者和数字相加减,得到的,是一个ascii码的值

一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间

UTF-8编码:
一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
Unicode编码:
一个英文等于两个字节,一个中文(含繁体)等于两个字节。

符号:
英文标点占一个字节,中文标点占两个字节。
举例:
英文句号“.”占一个字节大小,
中文句号“。”占两个字节大小。
字节和字符关系

1:char“字符”,byte“字节”,bit“位”;

2:1 byte = 8 bit;

3:char 在Java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符。

(一)“字节”的定义

字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。

(二)“字符”的定义

字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。

(三)“字节”与“字符”

它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:

字符与字节有什么区别

基本数据类型和引用数据类型关系

对于java,就看存在哪,

package com.itheima_06;



/*
    对于基本数据类型的参数,形式参数的改变,不影响实际参数的值
 */
public class ArgsDemo01 {
    public static void main(String[] args) {
        int number = 100;
        System.out.println("调用change方法前:" + number);
        change(number);
        System.out.println("调用change方法后:" + number);
    }

    public static void change(int number) {
        number = 200;
    }
}

调用change方法前:100
调用change方法后:100

/*
    对于引用类型的参数,形式参数的改变,影响实际参数的值
    【因为数组存的是一个地址,看传递的是地址还是变量】
 */
public class ArgsDemo02 {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30};
        System.out.println("调用change方法前:" + arr[1]);
        change(arr);
        System.out.println("调用change方法后:" + arr[1]);
    }

    public static void change(int[] arr) {
        arr[1] = 200;
    }
}

调用change方法前:20
调用change方法后:200

参考链接:
https://www.cnblogs.com/austinspark-jessylu/p/7794513.html
https://blog.csdn.net/truelove12358/article/details/48522437

https://www.runoob.com/java/java-basic-datatypes.html

https://zhidao.baidu.com/question/691867525948504084.html

https://www.cnblogs.com/oldthree3/p/9088029.html

深拷贝和浅拷贝

基本数据类型

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值