【Java基础知识(1)】对象在内存中的存储

本文详细解释了Java中对象如何在堆中动态分配,强调了String对象在常量池的处理机制,并通过示例对比了使用`String`关键字和`new`关键字创建字符串时内存分配的不同。还提到了一个常见错误,即未初始化对象导致的运行时异常。
摘要由CSDN通过智能技术生成

Java对象是如何在内存中存储的?

在Java中,所有的对象被动态地分配在堆中。这和C++不同,C++允许对象被存储在堆或者栈中。

参考Oracle官方文档:官方文档说明

在Java中创建字符串对象的2种方法:

1、 使用String关键字;
2、 使用new关键字。

(1) 使用String关键字:
使用双引号代表字符串。举例:

String str1 = "GFG";
String str2 = "GFG";

该操作在内存中的表示:

在这里插入图片描述

每当一个String表示被创建,JVM会首先检查该字符串是否在字符串常量池(String constant pool)中存在。若已存在,则返回一个对该实例的引用;若不存在,则在常量池中创建一个新的字符串实例。因此在上述例子中,事实上只有1个对象被创建。

(2) 使用new关键字:

举例:

String str1 = new String("GFG");
String str2 = new String("GFG");

上述操作在内存中的表示:

在这里插入图片描述
每当一个字符串对象被创建,JVM会将其在堆内存中创建。在上述实例中,JVM不会检查该字符串是否已经存在。无论如何,每个字符串对象都会获得独自的内存空间。

如下程序会报错:

class Test
{
    void show()
    {
        System.out.println("Test::show() called");
    }
}

public class Main()
{
    public static void main(String[] args)
    {
        Test t;
        t.show();
    }
}

要消除该报错,只需将主函数中的

Test t;

修改为

Test t = new Test();

即可。

参考:

GeeksforGeeks.

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不是AI

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

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

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

打赏作者

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

抵扣说明:

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

余额充值