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. python爬虫拉钩网:{'msg': '您操作太频繁,请稍后再访问', 'clientIp': '113.57.176.181', 'success': False}

    反爬第一课: 在打印html.text的时候总会提示 {'success': False, 'msg': '您操作太频繁,请稍后再访问', 'clientIp': '113.14.1.254'} 需要 ...

  2. selenium报错Element is not clickable at point及四种解决方法

    使用Selenium时,触发点击事件,经常报如下异常:Element is not clickable at point 1.未加载没加载出来就等待元素加载出来,再往下执行.可以使用python库ti ...

  3. Django 【基础篇】

    前戏 python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #cod ...

  4. LeetCode 84 | 单调栈解决最大矩形问题

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第52篇文章,我们一起来看LeetCode第84题,Largest Rectangle in Histogram( ...

  5. disconf原理解析

    前有了解过disconf,也知道它是基于zookeeper来做的,特意写了文章记录下自己的见解.如有错误,欢迎指正. 1.disconf-web会在启动时,将自身的host和配置文件注册到zookee ...

  6. JavaScript定时器及回调用法

    JavaScript定时器及回调用法 循环定时任务 // 假设现在有这样一个需求:我需要请求一个接口,根据返回结果判断需不需要重复请求,直到达到某一条件为止,停止请求执行某操作 <script ...

  7. 一个简单的Maven小案例

    Maven是一个很好的软件项目管理工具,有了Maven我们不用再费劲的去官网上下载Jar包. Maven的官网地址:http://maven.apache.org/download.cgi 要建立一个 ...

  8. IDEA 导入maven 项目,出现报错,不能运行之类的

    选择pom.xml,右键选择 Add as Maven Project

  9. MacOS中Mysql设置默认字符集

    一.查看字符集 mysql> show variables like 'character%'; +--------------------------+-------------------- ...

  10. 做软件测试要月入20k?听听腾讯大牛怎么说

    作者:兰色链接:https://www.zhihu.com/question/373819487/answer/1183309514来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...