String 的两种实例化方式

隐式实例化:直接赋值

public class Demo {
public static void main(String[] args) {
String s = "hello";
String s2 = "hello";
System.out.println(s == s2);
}
}
true

String 一般使用直接赋值的方式创建字符串。此时字符串是一个匿名对象,存放于位于堆的字符串常量池(String Table)中。匿名对象也是对象,就如同对象创建后,对象本身不可以改变,字符串也有不可变的特性,每次都将创建新的字符串。因为不可变,所以字符串可以称为字符串常量。

JVM 中设计字符串常量池是为了减少实例化重复的字符串,以节约新建时间和内存空间。

public class Demo {
public static void main(String[] args) {
String s = "hello";
System.out.println(s);
String s = "world";
System.out.println(s2);
}
}
hello
world

显式实例化:使用构造函数

public class Demo {
public static void main(String[] args) {
String s = "hello";
String s2 = new String("hello");
String s3 = new String("hello");
System.out.println(s==s2);
System.out.println(s==s3);
System.out.println(s2==s3);
}
}
false
false
false

String 是一个类,可以使用构造函数创建字符串。

intern() 方法

public class Demo {
public static void main(String[] args) {
String s = "hello";
String s2 = new String("hello");
String s3 = new String("hello");
System.out.println(s2 == s2.intern());
System.out.println(s == s3.intern());
System.out.println(s2.intern() == s3.intern());
}
}
false
true
true

intern() 方法,复制字符串对象到字符串常量池,返回字符串(引用)。native() 方法

具体来说:JVM 会在字符串常量池中去比较是否有「等于(equals)」 此 String 对象的字符串,如果有,返回字符串引用,没有则将此 String 对象包含的字符串放入字符串常量池中,再返回引用

String 被 final 修饰。

  • final 修饰类,类不能被继承
  • 修饰方法,方法不能被重写
  • 修饰字段,字段不能指向其他对象

字符串常量池和运行时常量池的关系

  • 没有关系,运行时常量池存放运行 Class 文件的常量池表。

String 常用方法

转换为字符数组:toCharArray()

String string = "hello";
char[] array = string.toCharArray();
return new String(array);

获取指定字符

String string = "hello";
char c = string.charAt(0) // 'h'

格式化

String.format("%s %s %s", c1.name, c2.name, C.name)















延伸阅读

String 的两种实例化方式的更多相关文章

  1. (原)String类两种实例化的区别

    String有两种实例化方式,一种是通过直接赋值的方式,另外一种是使用标准的new调用构造方法完成实例化. public class StringDemo { public static void m ...

  2. Java中String类两种实例化的区别(转)

    原文:http://blog.csdn.net/wangdajiao/article/details/52087302 一.String类的第一种方式 1.直接赋值 例:String str = &q ...

  3. Spring的核心api和两种实例化方式

    一.spring的核心api Spring有如下的核心api BeanFactory :这是一个工厂,用于生成任意bean.采取延迟加载,第一次getBean时才会初始化Bean Applicatio ...

  4. Java中String对象两种赋值方式的区别

    本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过“字面量”赋值 ...

  5. Gson的两种实例化方式:

    2018-11-13   09:21:44 Gson的两种实例化方式: 1: 使用new Gson(); 普通实例化方式,不能配置定制化选项 Gson gson = new Gson(); 2: 通过 ...

  6. C++的两种实例化方式

    C++中,类有两种实例化方式.一种是有new关键字,一种没有new关键字.那么,这两种实例化方式有什么区别呢? A a;//(1) a存在于栈上 A* a = new A();//(2) a存在于堆中 ...

  7. String类对象两种实例化方式比较

    第一种:直接赋值 String str =  "hello!" ; 在java中,有一个字符串常量池,对于这种直接赋值的,会直接写进常量池(常量池里面不存在其value,) 自JD ...

  8. 关于String的两种赋值方式

    String的两种赋值是不同的,String str1=“hello”,指向堆内存中的"hello",而String str2=new String("hello&quo ...

  9. String 两种实例化方式的区别

    package com.java1234.chap03.sec08; public class Demo3 { public static void main(String[] args) { //1 ...

随机推荐

  1. Hadoop基础(一):概论

    1.大数据概念 2 大数据特点(4V) 图2-2 大数据特点之大量 图2-3 大数据特点之高速 图2-4 大数据特点之多样 图2-5 大数据特点之低价值密度 3 大数据部门业务流程分析 4 大数据部门 ...

  2. 爬虫05 /js加密/js逆向、常用抓包工具、移动端数据爬取

    爬虫05 /js加密/js逆向.常用抓包工具.移动端数据爬取 目录 爬虫05 /js加密/js逆向.常用抓包工具.移动端数据爬取 1. js加密.js逆向:案例1 2. js加密.js逆向:案例2 3 ...

  3. VTK根据三维坐标点集生成点云

    一个简单的利用VTK根据三维坐标点集生成点云的例子,仅供参考. 一.环境:vtk-8.1 & vs2013(需自行配置vtk的环境) 二.我所读取的三维坐标点集为txt格式文件,每个点的x,y ...

  4. 手写简易的Mybatis

    手写简易的Mybatis 此篇文章用来记录今天花个五个小时写出来的简易版mybatis,主要实现了基于注解方式的增删查改,目前支持List,Object类型的查找,参数都是基于Map集合的,可以先看一 ...

  5. maven自动创建项目目录骨架

    方法一: 1:打开命令窗口 在要创建项目的路径下按住H2SIT ,然后点击右键  ,在弹出菜单中选择 在此处打开命令窗口(W) 2:目录创建 方法二:

  6. 三个Python自动化测试高效工具的使用总结

    ##Python语言的特点 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号 ...

  7. Arctic Code Vault Contributor 上榜了 go-admin v1.1 beta 版本发布

    Arctic Code Vault Contributor 上榜了,内心比较喜悦,谢谢开源社区的支持,也谢谢广大 coder 的支持: go-admin 是一个基于 Gin + Vue + Eleme ...

  8. 使用Thanos实现Prometheus指标联邦

    本文来自Rancher Labs Prometheus是CNCF中已经毕业的项目之一,主要用于监控和告警.在Kubernetes生态中,它是应用最为广泛的监控和告警工具之一.Rancher用户可以通过 ...

  9. Mnist手写数字识别 Tensorflow

    Mnist手写数字识别 Tensorflow 任务目标 了解mnist数据集 搭建和测试模型 编辑环境 操作系统:Win10 python版本:3.6 集成开发环境:pycharm tensorflo ...

  10. 题解 洛谷 P4569 【[BJWC2011]禁忌】

    考虑用\(AC\)自动机来解决本题这样的多字符串匹配问题. 要最大化魔法分割后得到的禁忌串数目,最优情况肯定为在一个串中每个禁忌串的右端点进行分割.对应到\(AC\)自动机上,就是匹配到一个禁忌串后, ...