Java中的基本数据类型与引用数据类型

全网最详细的负载均衡原理图解

一、基本数据类型

  • byte、short、int、long(整数类型)
  • float、double(浮点数类型)
  • char(字符型)
  • boolean(布尔类型 )

Java数据大多数存放在堆栈中。

  • 栈区:存放局部变量,对象声明的引用等。

  • 堆区:存放new关键字创建的类(包含成员变量)和数组等。

堆与栈的优缺点

  • 栈的优点:栈数据可以共享,存取速度比堆。   缺点是:存在栈中数据大小与生命周期是确定的。

  • 堆的优点:可以动态分配内存大小,生存期也不必事先告诉编译器。缺点是:存取速度较

举个栗子,如下图:

  • 编译器会在栈中创建一个a的引用,然后在栈中查找字面值为5的引用,将a指向5的地址,若没有找到,就会开辟一个地址来

    存放字面值5,然后再将a指向该地址。定义int c=5;因为栈中存在字面值5,所有c会直接指向5的地址。令a=8,因为栈中

    没有字面值为8的引用,所有会开辟一个地址存放8,a会重新指向8的地址,c的指向不受a影响,c的值不会改变。

二、引用数据类型

1. Class(类)

2. Interface(接口)

3. Array(数组)

  • Java是面向对象语言,它为每一个基本数据类型都做了相应的包装类(见上一个表格),也就是实现了基本类型变量到包装类

    对象的转换。引用类型一般通过new关键字来创建,(对象)它存放在内存的中,可以在运行时动态的分配内存大小。引用

    变量中存放的是变量内容的地址,它存放在内存的中。当引用类型变量不被使用时,Java内部的垃圾回收器GC会自动回收

    痞子衡嵌入式:MCUBootFlasher v3.0发布,为真实的产线操作场景而生

1.代码示例-Class:

public class Demo {
	String Name;
	int Age;
	double Score;
	Demo(String Name,int Age,double Score){
        //定义带三个参数的构造函数,进行初始化
		this.Name=Name;
		this.Age=Age;
		this.Score=Score;
	};
	public static void main(String[] args) {
		Demo d1=new Demo("小吴",20,98);
		Demo d2=new Demo("小天",19,80);
	}
  }

  • 引用本身是保留在中的,而引用所指的对象是存放在中的。

2.代码示例-Interface

interface Animal {//定义Animal接口
      public void eat();
      public void speak();
}
public class Dog implements Animal {//Dog类实现Animal接口 
      public void eat() {
            System.out.println("我喜欢吃骨头!");
	}
      public void speak() {
            System.out.println("汪汪汪!");
	}
      public static void main(String[] args) {
            Dog d=new Dog();
            d.eat();
            d.speak();
	}
}
  • 编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

  • 接口与类的区别:

  1. 接口不能用于实例化对象。

  2. 接口没有构造方法。

  3. 接口中所有的方法必须是抽象方法。

  4. 接口不能包含成员变量,除了 static 和 final 变量。

  5. 接口需要被类实现。

  6. 接口支持多继承。

3.代码示例-Array

public class Array {
      public static void main(String[] args) {
            int[] myList = new int[] {5,2,0,1,3,1,4};
      for(int list: myList) {
            System.out.print(list);
      }
      }
}
  • 在以上代码中,myList变量存放了数组对象的引用,它存放到栈中,而数组对象所占的空间在堆上被分配(和上图一样)。

拓展1:

  • 方法的返回值类型为类名:返回该类的对象。

  • 方法的返回值类型为接口名:返回该接口的实现类的对象。

 public static Comparable findMax(Comparable[] arr) {
      int maxIndex=0;
      for(int i=1;i<arr.length;i++)
            if(arr[i].compareTo(arr[maxIndex])>0)
                  maxIndex=i;
      return arr[maxIndex];
 }
  • 上述代码中,传递参数为实现了Comparable接口的对象数组,方法返回的是Comparable接口的实现类的对象。

  • 我们通常会使用Object、接口类型等方式来表示泛型,目的是支持代码重用。

拓展2:自动装箱与拆箱

  • 自动装箱:如果一个int型量被传递到需要一个Integer对象的地方,编译器将在幕后插入一个对Integer构造方法的调用。

  • 自动装箱:如果一个Integer对象被放到需要int型量的地方,则编译器将在幕后插入一个对intValue方法的调用。

注:参考《数据结构与算法分析Java语言描述》和 菜鸟教程

利用容器逃逸实现远程登录k8s集群节点

给TA买糖
共{{data.count}}人
人已赞赏
经验教程

机器学习6-回归改进

2021-1-21 22:24:00

经验教程

全网最详细的负载均衡原理图解

2021-1-21 23:22:00

⚠️
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。 本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。本站部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。
无意侵害您的权益,请发送邮件至 momeis6@qq.com 或点击右侧 私信:momeis 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索