字符串内存分配

news2024/10/1 19:26:11

涉及三块区域:栈,堆,字符串常量池(jdk1.7之前在方法区,jdk1.7之后在堆中)

 关于字符串常量池到底在不在堆中:

jdk1.6及以前,方法区独立存在(不在堆里面),字符串常量池存在方法区

jdk1.7及以后,字符串常量池被移到堆中

两种创建字符串的方式:

1.直接创建  String s="test"

只在栈中创建一个对象,堆中不创建对象

这个栈对象中保存的就是字符串的地址

 2.new的方式创建    String s=new  String("test")

总共创建两个对象,栈中创建一个对象,堆中创建一个对象

堆中对象保存的是字符串的地址,栈中对象保存的是堆中对象的地址,所以栈中对象保存的是地址的地址

 

String s1 = new String("abc")  这句代码创建了几个对象?

答案:1个或者2个  

其实就是问栈和堆里面总共有几个对象

如果堆里面已经有一个对象保存了“abc“这个对象的地址,那就只需要在栈中创建一个对象,保存堆中对象的地址即可,所以只需要创建一个对象

如果没有,那就要创建两个对象,先在堆中创建一个对象,保存字符串的地址,然后再在栈中创建一个对象,保存堆中对象的地址,总共创建两个对象

public class StringTest 
{

    public static void main(String[] args) 
    {
        String str1 = "abc";
        String str2 = "abc";
        String str3 = new String("abc");
        String str4 = new String("abc");

        System.out.println(str1 == str2);  //true
        System.out.println(str1 == str3);  //false
        System.out.println(str1.equals(str3));  //true
        System.out.println(str3 == str4);     //false
    }
}

第一个: str1和str2这两个对象里面存的都是字符串中的地址,所以是true

第四个:new一次就要在堆中创建一个新对象,所以str3和str4存的堆中对象地址不相等

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/348238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

达梦数据库监控指标

一、达梦数据库监控指标 数据库常见性能指标主要有:当前登录数、非阻塞锁数、当前死锁数、阻塞锁数、当前锁数、会话数等内容,如下图所示。 注意:以下是 达梦数据库监控所需要的指标,具体根据需要监控哪些、超阈值而定。 1.1 新建主机群组 1.2 新建模板 1.3 创建主机 1.…

【Airplay_BCT】Bonjour API架构

Bonjour API 架构 OS X 和 iOS 为 Bonjour 服务应用程序提供了多层应用程序编程接口 (API): Foundation 框架中的 NSNetService 和 NSNetServiceBrowser 类; CFNetServices,Core Services 中 CFNetwork 框架的一部分; Java 的 DN…

如何在现实场景中随心放置AR虚拟对象?

随着AR的发展和电子设备的普及,人们在生活中使用AR技术的门槛降低,比如对于不方便测量的物体使用AR测量,方便又准确;遇到陌生的路段使用AR导航,清楚又便捷;网购时拿不准的物品使用AR购物,体验更…

【每天进步一点点】函数表达式和函数声明

函数声明 function 函数名(){} 函数声明会被率先读取。 函数声明后不会立即执行,会在我们需要的时候调用到。 由于函数声明不是一个可执行语句,所以不以分号结束。 函数表达式 表达式赋值给了一个变量 const 变量名 functi…

GT-suite v2016解决许可证过期问题(附新版liscense下载地址)

安装GT-suite v2016时遇到了如图报错的问题。当时的报错找不到了,下图是贴吧相同问题的报错图。 为了解决问题,先根据某网友的如下答复操作: 添加环境变量后仍然有相同报错。 看来需要寻找其他方法。 再尝试着卸载GT-suite v2016&#xff0c…

【Python--torch.nn.functional】F.normalize用法 + 代码说明

【Python–torch.nn.functional】F.normalize介绍 代码说明 文章目录【Python--torch.nn.functional】F.normalize介绍 代码说明1. 介绍2. 代码说明2.1 一维Tensor2.2 二维Tensor2.3 三维Tensor3. 总结1. 介绍 import torch.nn.functional as F F.normalize(input: Tensor, …

(考研湖科大教书匠计算机网络)第四章网络层-第五节:静态路由配置及其可能产生的路由环路问题

获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:静态路由配置(1)概述(2)举例说明A:静态路由配置B:默认路由C:特定…

【Python从入门到进阶】7、运算符

接上篇《6、变量规范及类型转换》 上一篇我们学习了Python变量的命名规范以及类型转换。本篇我们来学习Python的运算符部分,包括算数运算符、赋值运算符、比较运算符、逻辑运算符等。 一、运算符含义 运算符用于执行程序代码运算,会针对一个以上操作数…

网友眼中越老越吃香的行业,果然是风向变了!

越老越吃香的行业,一直都是被热议的话题。对于年轻人来说,找到一个适合自己的并且具有前景的工作,不是一件容易的事情。 最近,看到有人在平台上问相关的问题,本着认真看一看的态度点进去,却差点被热评第一…

MyBatis详解1——相关配置

一、什么是MyBatis 1.定义:是一个优秀的持久层框架(ORM框架),它支持自定义 SQL、存储过程以及高级映射。MyBatis是一个用来更加简单的操作和读取数据库的工具。 2.支持的操作方式:xml或者注解实现操作(xm…

Hadoop集群配置

一、系统文件配置集群部署规划NameNode和SecondaryNameNode不要安装在同一台服务器ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode放在同一台机器上。这里装了四台机器,ant151,ant152,ant153,ant154。ant151ant152ant153ant154NameNode…

【JUC并发编程】18 CopyOnWriteArrayList源码也就够看2分钟

文章目录1、CopyOnWriteArrayList概述2、原理 / 源码1)构造函数2、add()3)get()4)remove()5)iterator()1、CopyOnWriteArrayList概述 CopyOnWriteArrayList相当于线程安全的ArrayList,底层是一个可变数组。 特点如下…

如何在外网访问内网的 Nginx 服务?

计算机业内人士对Nginx 并不陌生,它是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,除了nginx外,类似的apache、tomcat、IIS这几种都是主流的中间件。 Nginx 是在 BSD-like 协议下发行的&…

PythonWeb Django PostgreSQL创建Web项目(一)

环境搭建与初始化 一、 python3下载安装测试 1. 下载地址 官网地址:https://www.python.org/ 国内速度比较慢 国内镜像网站地址:https://registry.npmmirror.com/binary.html?pathpython/ 推荐地址速度快 目前官网最新版本3.11.2如下官网截图 要用嘛…

物联网通信复习简记——助力通关期末考试

物联网通信复习简记——助力通关期末考试 文章目录物联网通信复习简记——助力通关期末考试1. 概述1.1 物联网通信体系架构的基本概念1.2 网络分层模型1.3 常见IoT通信技术2. 物理层2.1 编码/基带信号波形/数字基带调制2.2 信道编码-1- 奇偶校验码-2- 汉明码-3- 循环码差错检验…

人员定位需求多,场景目标各不同

GPS技术为现代人带来了许多便利,也提供了诸多基于位置的新型服务。随着科技的发展,人员位置信息在如今的生产生活中也越发重要起来。因此,不同行业领域开始关注人员定位,尤其关注室内人员定位。室内人员定位需求从目的性出发&…

Venom靶机

环境准备 靶机链接:百度网盘 请输入提取码 提取码:fv06 虚拟机网络链接模式:桥接模式 攻击机系统:kali linux 2022.03 信息收集 1.探测目标靶机开放端口和服务情况 nmap -p- -sV -A 10.10.10.133 2.查看网页最下面&#xf…

GaiaX开源解读 | 表达式作为逻辑动态化的基础,我们是如何设计的

GaiaX跨端模板引擎,是在阿里优酷、淘票票、大麦内广泛使用的Native动态化方案,其核心优势是性能、稳定和易用。本系列文章《GaiaX开源解读》,带大家看看过去三年GaiaX的发展过程。 前言 GaiaX【https://github.com/alibaba/GaiaX】是由优酷应…

详解ArrayList

目录 1.数据结构 2.初始化 2.1.默认构造 2.2.带参构造 3.扩容 3.1.判断需要多少容量 3.2.判断是否需要扩容 3.3.扩容 4.遍历 5.拷贝 6.序列化 JDK版本:JDK8 1.数据结构 底层使用Object类型的数组实现,线程不安全,添加元素时如果内存…

【遇见青山】基于Redis的Feed流实现案例

【遇见青山】基于Redis的Feed流实现案例1.关注推送2.具体代码实现1.关注推送 关注推送也叫做Feed流,直译为投喂。为用户持续的提供"沉浸式”的体验,通过无限下拉刷新获取新的信息。 Feed流产品有两种常见模式: 这里我们实现基本的TimeL…