【java基础】数据类型是啥?有啥用?

本文详细总结了数据类型的适用范围和使用。介绍了变量的概念、分类,阐述了使用变量的原因及内存分配情况。重点讲解基本类型(如int、char等)和引用类型的使用,对比了两者内存分析,还说明了类型转换和包装类的相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一说到数据类型,我们就会想到int,char,double等,那今天我们就详细总结一下它们的适用范围和使用。本文的思维架构:
在这里插入图片描述

变量

(1)what?-概念和分类

概念:变量相当于一个有名字的容器,里面装的是各种不同类型的数据。
在这里插入图片描述
分类:
(1)根据其引用的数据类型的不同,分为基础类型变量和引用类型的变量。关于两者的区别和内存分析,在本文的后面会提到。
(2)根据变量的作用范围不同,分为成员变量和局部变量。两者的区别是:成员变量是在类范围内定义的变量,作用范围是类内部;局部变量是在一个方法内定义的变量,作用范围是方法内部。

public class book{
    //成员变量
   public int a=1;
    //在此处不能使用b
    
   public void say(){
      //局部变量
     int b=2;
      //在此处能使用a
   }
}

(2)why?-为什么要用变量

个人理解,变量就相当于在内存中“占地为王”,画一块区域,就代表了变量a。以后程序要是想对变量a赋值,则把数据放到此区域里。如果想读取变量a的值,就访问此内存区域即可。可见,编程就是对内存中的数据进行访问和修改的过程。
不同的是,各变量所在的内存是不一样的。如果是局部变量,其是在栈上分配内存的。解释一下原因,栈是线程私有的,其里面的方法随着调用结束而消亡,则在方法内定义的局部变量也会随着消亡。
而成员变量是在堆内分配内存的。堆是线程公有的,不会随着某个方法的消亡而消亡。
在这里插入图片描述

(3)how?-怎么用

变量的定义语法:

变量类型 变量名 [=初始值]

举例:

int a=0;

此时的int就是变量类型,也就是今天要重点讲的数据类型。数据类型分为基本类型和引用类型两种。

基本类型

基本类型分为4类8种,其中有几个重要的,已用红色标出,其内存大小也已列出。
在这里插入图片描述

(1)int

如果我们要定义一个整数类型的变量,可以用byte、short、int、long来修饰,不过用的最多的是int。比如 int a=1。
值得注意的是,如果想定义一个long类型的变量,需要在数字后面加上“l”或“L”。就像以下的代码是错误的:

long a=9999999999999

应该写成:

long a=9999999999999L

(2)char

//定义一个字符值
char a='美'

既然提到字符值,那就顺便说一下怎么定义一个字符串:

//定义一个字符串
String b="沧海月明珠有泪,蓝田日暖玉生烟。"

可见,定义字符值需要用单引号,定义字符串需要用双引号。

(3)double

说完整数,我们来说说小数。float和double可用于表示小数,double比float更精确一点,如果还需要更精确,可以使用BigDecimal类。这个类会在后续的常用类中讲到。

 //定义double类型的变量
double a=3.14
 //为了便于数位数,可以借助于下划线。整数和浮点数均可以这样写
double a=3.141_592_6

(3)boolean

boolean类型就是我们所说的“真假”。“这个颜色是不是红色”,只有真、假两种可能。

 //定义a的值为true
boolean a=true;
引用类型

引用类型包括类,接口,数组等。之所以叫做引用类型,是因为访问其值时,需要借助“指针”。

(1)引用类型和基本类型的内存分析对比

在这里插入图片描述
在上图中,橘色部分为基本类型变量,其余部分为引用类型变量。可以看出,如果想访问基本类型变量的值,直接访问栈中内存即可。如果要访问引用变量的属性值,还需根据地址去堆中寻找。

(2)String

之所以将String拿出来讲,是因为人们易把String当成基本类型,这是错误的。String属于常用类,类是属于引用类型的,所以String属于引用类型。
在本文的前面部分,我们已经说过了String类的定义:

String b=“沧海月明珠有泪,蓝田日暖玉生烟。”

除此之外,如果是想将基本类型变为字符串,直接和“”进行连接运算即可。

String a=5+“”;
类型转换

类型转换就是修改变量的数据类型。有自动类型转换和强制类型转换两种。

(1)自动类型转换(小到大)

在这里插入图片描述
还以“变量图”为例,如果将小杯子的水倒入到大杯子里,是能盛下的,如果相反,则水会溢出来。同理,如果是将所占内存小的类型转换为所占内存大的类型,则可以自动转换过去。

//将int类型转换为double类型
int a=1;
double b=a;

(2)强制类型转换(大到小)

就像水会溢出来丢失一样,如果进行强制类型转换,数据的精度也有可能丢失。比如将一个double类型的数据转为int类型,则小数部分会丢失。下面的代码b的值为3。

//将一个double类型的转换为int类型
double a=3.14;
int b=(int)a;
包装类型

(1)what?

包装类就是将8个基本类型的值包装成对象使用。除了int和char,其余的都是将其首字母大写即可。

基本类型包装类
intInteger
charCharacter
doubleDouble
…………

(2)why?

将基本类型“包装起来”,使它变成了对象,也就有了属性和方法,就可以对其进行更多的操作。

(3)how?

在JDK1.5之后,就可以进行自动拆装箱操作了。所谓自动装箱,就是把一个基本类型变量直接赋值给对应的包装类变量。

//装箱,int变为Integer
Integer a=5;

拆箱则相反:

//拆箱,将Integer变为int类型
int b=a;
小结

本文细致讲解了变量的概念,基本类型的使用,基本类型和引用类型的内存分析对比,自动类型转换和强制类型转换,自动拆装箱等。

<think>嗯,用户想了解Java中new关键字的作用和用法。根据提供的引用资料,我需要先整理出new的基本功能,比如创建对象和数组。记得要分点说明,结构要清晰。 首先,new的主要作用应该是实例化对象,引用1和引用3都提到这一点。需要解释对象创建的过程,包括内存分配在堆区,还有构造方法的作用。这里可以举一个简单的例子,比如Student stu = new Student(); 这样用户容易理解。 接下来是数组的动态初始化,引用1和引用2都提到数组的创建。要说明数组是对象,所以也需要用new,比如int[] arr = new int[5]; 这里可能需要区分基本类型数组和对象数组的不同。 然后,引用5提到匿名对象的应用场景,比如直接调用方法new Cat().run(); 虽然匿名对象只能使用一次,但适合单次操作的情况。这部分需要解释清楚匿名对象的用途和限制。 另外,引用5还提到对象引用的赋值问题,比如将one赋值给two,导致两个引用指向同一个对象。这时候修改其中一个会影响另一个,这点需要注意,可能用户在实际开发中会遇到这样的问题,需要提醒注意事项。 还要注意new关键字使用时的一些注意事项,比如多次访问同一对象需要声明变量,避免重复创建对象浪费资源。这部分引用5有提到,可以强调内存管理的重要性。 最后,可能还需要补充new的其他相关知识点,比如与内存分配的关系,堆区和栈区的区别。不过根据提供的引用,主要信息已经覆盖了。需要确保回答符合用户要求,使用中文,行内公式正确,比如提到内存分配时如果有数学表达式要用$符号。不过当前问题可能不需要数学公式,但如果有的话要注意格式。 现在需要检查是否有遗漏的信息,比如引用4中的volatile关键字,虽然与new无关,但用户的问题不涉及这个,可以忽略。确保所有引用的相关部分都正确引用,比如引用1、2、3、5中的内容都要在回答中标明来源,以[^1]、[^2]等形式标注。 总结一下,回答的结构应该是:作用分点,包括对象创建、数组初始化、匿名对象;用法分点,包括基本语法、注意事项;最后相关问题。这样用户能一步步理解new关键字的应用,同时结构清晰,符合要求。</think>### Java中`new`关键字的作用及用法解析 #### 一、`new`关键字的作用 1. **实例化对象** `new`用于创建类的实例对象,触发**构造方法**初始化对象,并在内存堆区分配空间[^1][^3]。例如: ```java Student stu = new Student(); // 创建Student类的实例 ``` 2. **动态初始化数组** 在Java中,数组是对象,需通过`new`动态分配内存空间[^1]。例如: ```java int[] arr = new int[5]; // 创建长度为5的整型数组 ``` 3. **匿名对象操作** 若只需一次方法调用,可直接使用`new`创建匿名对象[^5]。例如: ```java new Cat().run(); // 匿名调用Cat对象的run方法 ``` #### 二、`new`关键字的用法 1. **基本语法** ```java 类名 对象名 = new 类名(构造参数); // 分配堆内存并调用构造方法 ``` 示例: ```java String str = new String("Hello"); // 创建String对象 ``` 2. **注意事项** - **对象引用共享** 若将对象引用赋值给其他变量(如`two = one`),两个变量指向同一内存地址,修改其一会影响另一个。 ```java Cat one = new Cat(); Cat two = one; // two与one指向同一对象 ``` - **内存管理** 多次访问同一对象时需声明变量,避免重复创建匿名对象浪费资源。 #### 三、`new`与内存分配的关系 `new`操作会在**堆内存**中开辟空间存储对象或数组,而对象引用(变量)存储在**栈内存**中[^3]。这种设计实现了对象数据的动态管理,但也需注意内存泄漏风险。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡夫卡的熊kfk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值