java—数据类型

来源:互联网 发布:北京亚信数据有限公司 编辑:程序博客网 时间:2024/05/17 04:03

八大基本数据类型:

1、byte

2、short

3、int 

4、long 

5、float

6、double

7、char 

8、boolean


整形:

byte:byte在内存中占一字节(8个bit位),数据大小是:-128~127,如果超出这个数字就会发生强制转换。

      short:short在内存中占两个字节(16个bit位),数据大小是:-32768~32767

     int:int在内存中占4个字节(32个bit位),该数据的取值已经过亿了,数据大小是:-2^31 ~ 2^31(负的2的31次方到正的2的31次方自己算去,数学差就不多说了) 

    long:在内存中占8个字节(64个bit位),数据大小:-2^63 ~ 2^63

  浮点型(小数):

float :在内存中占4个字节(32个bit位),数据大小:-2^31 ~ 2^31

double :在内存中占8个字节(64个bit位),数据大小:-2^63 ~ 2^63

  字符:

char:在内存中占2个字节(16个bit位),数据大小:-2^15 ~ 2^15

  布尔:

  boolean:在内存中占1个字节(8个bit位),数据大小:-2^7 ~ 2^7该数据有点特殊只有2个值,真和假:true,false;

    以上这些数据都是属于基本数据类型,在java的数据类型中分为两大类:



    1、基本数据类型

    2、引用数据类型

    以上介绍的都是基本数据类型,存储的数据都是在栈内存中,存储的都是实实在在的数据,而引用数据类型储存的是在堆内存中,因为引用数据类型存储的都是数据的内存地址值,利用这地址指向堆内存,因此也叫引用数据类型。

    引用数据类型:字符串(String) 数组(int[]) 任意对象。

    说道关于对象是引用数据类型,我来和大家谈谈本人亲身经历的一个代码错误!

    我记得题目的需求是创建一个学生类,有姓名等等,然后根据用户输入的数据,将这些对象存进对象数组装起来。

   代码如下:

import java.util.Scanner;
class Student
{
String name;
}
class Save
{
Student[] arr = new Student[5];
public void setName(Student a){
for(int i=0;i<arr.length;i++){
if(arr[i]==null){//判断是否已经有数据在当前角标
arr[i]=a;
break;
}
}
}
}
class  Test
{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);


Save a = new Save();
Student b= new Student();


for(int i =0;i<a.arr.length;i++){
System.out.println("请输入第"+(i+1)+"位同学的姓名");
b.name=input.next();
a.setName(b);
}
for (int y = 0;y<a.arr.length;y++)
{
System.out.println(a.arr[y].name);
}
}
}

这段代码不管我们输入多少个学生的姓名最后输出的全是最后输入的学生的姓名,这是为什么了?我们来看看这个对象数组的内存地址(把输出语句.name去掉就可以看内存):


从内存地址我已经可以知道,我们始终在操作同一个对象,每次存进去都是同一个对象的内存地址值,所以在这个学生对象数组中的内存都是指向这个对象,因此不管我们输入数据都会覆盖掉上一个数据,我们只需将学生类放进for循环就能解决这个问题。

所以在这里提醒下大家,在对引用数据类型进行操作的时候如果发生问题,可以从查看内存地址这几个方面下手。


     


 

    


0 0
原创粉丝点击