String的两种初始化方法讲解

 更新时间:2019年04月10日 09:00:20   作者:Kikityer  
今天小编就为大家分享一篇关于String的两种初始化方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

前言:String的创建和初始化有两种方法,既可以用String str = new String("abc")创建一个字符串,也可以用String str = "abc"的形式创建。

1: String str = "abc"创建一个字符串的过程

  • 首先在常量池(方法区)中查找是否存在内容为"abc"的字符串对象
  • 如果不存在则在常量池中创建一个"abc"的字符串对象,并让str引用该对象
  • 如果存在则直接让str引用该对象

2: String str = new String("abc")创建一个字符串的过程

  • 首先定义一个str的String类型的引用并存放在栈中
  • 在字符串常量池中查看是否存在内容为"abc"字符串对象 
  • 若存在则跳过这个步骤,若不存在,则在字符串常量池中创建一个内容为"abc"的字符串对象。(前三步都是在编译时完成的)
  • 执行new操作,在堆中创建一个指定的对象"abc",这里堆的对象是字符串常量池“abc”对象的一个拷贝对象。
  • 让str指向堆中“abc”这个对象(也就是存储这个对象的在堆中的地址)

有时会问 String str = new String("abc")创建一个字符串的过程会创建几个对象?

答:一个或两个(因为编译时会检查方法区常量池中是否已经存在需要创建的字符串对象。若存在直接将引用指向常量池的对象,此时只会在随后的运行时堆中创建一个对象。而如果不存在,会先在常量池中创建一个对象,在随后的运行时还会在堆中再创建一个对象,所以此时会创建两个对象)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • Java手动配置线程池过程详解

    Java手动配置线程池过程详解

    这篇文章主要介绍了Java手动配置线程池过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • jsp+servlet实现简单登录页面功能(附demo)

    jsp+servlet实现简单登录页面功能(附demo)

    本文主要介绍了jsp+servlet实现简单登录页面功能登录成功跳转新页面,登录失败在原登录界面提示登录失败信息,对初学者有一定的帮助,感兴趣的可以了解一下
    2021-07-07
  • Java Elastic-Job分布式定时任务使用方法介绍

    Java Elastic-Job分布式定时任务使用方法介绍

    xxl-job 通过一个中心式的调度平台,调度多个执行器执行任务,调度中心通过 DB 锁保证集群分布式调度的一致性,这样扩展执行器会增大 DB 的压力,然而大部分公司的任务数,执行器并不多;xxl-job 提供了非常好用的监控页面甚至还有任务失败的邮件告警功能
    2023-01-01
  • Java实现月饼的制作、下单和售卖功能

    Java实现月饼的制作、下单和售卖功能

    这篇文章主要介绍了Java实现月饼的制作、下单和售卖,借此机会,我们用Lambda实现一遍月饼制作,下单,售卖的开发设计模式,主要有制作月饼的工厂模式,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • java实现航空用户管理系统

    java实现航空用户管理系统

    这篇文章主要为大家详细介绍了java实现航空用户管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • mybatis 获取无数据的字段不显示的问题

    mybatis 获取无数据的字段不显示的问题

    这篇文章主要介绍了mybatis 获取无数据的字段不显示的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • java获取json中的全部键值对实例

    java获取json中的全部键值对实例

    下面小编就为大家分享一篇java获取json中的全部键值对实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • SpringBoot整合websocket实现即时通信聊天

    SpringBoot整合websocket实现即时通信聊天

    这篇文章主要介绍了SpringBoot整合websocket实现即时通信聊天,实时通信是一个实时通信系统,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流,需要的朋友可以参考下
    2022-05-05
  • Spring内置定时任务调度@Scheduled使用详解

    Spring内置定时任务调度@Scheduled使用详解

    这篇文章主要介绍了Spring内置定时任务调度@Scheduled使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • 浅谈为什么Java中1000==1000为false而100==100为true

    浅谈为什么Java中1000==1000为false而100==100为true

    这篇文章主要介绍了浅谈为什么Java中1000==1000为false而100==100为true,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论