java字符数组初始化_Java 字符串(一)字符串初始化

一、String类概述

1、概述

java.lang.String类代表字符串。Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例。String 是引用数据类型,不是基本数据类型。

类String 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻译为大写或小写的所有字符的字符串的副本。

2、特点【重要】

a、字符串不变:字符串的值在创建后不能被更改。【非常重要】

Demo:

String s1 = "abc";

s1 += "def";

System.out.println(s1); // s1 = "abcdef"

分析:内存中有"abc","abcdef"两个对象,s1从指向"abc",改变指向,指向了"abcdef" ,字符串本身并没有改变,而是改变了指向。

扩展:String对象怎么就不可变?

底层char[]数组有final修饰,意味着这个数组不能扩容等,来达到存更多的字符

char[]数组是私有的,程序员无法直接操作这个char[]数组,而且String没有提供这样的方法,来修改char[]数组的元素的值。

String提供的所有的方法,对字符串的修改都是给你返回一个新的字符串对象。

b、因为String对象是不可变的,可以把一些字符串存到常量池中,字符串在常量池中,可以被共享。

Demo:

String str1 = "abc";

String str2 = "abc";

分析:内存中只有一个 "abc" 对象被创建,同时被 s1 和 s2 共享。

c、字符串对象底层的存储:

JDK1.9之前:底层是用 char[ ] 存储

JDK1.9之后:底层选用 byte[ ] 存储

Demo:

String str = "abc";

相当于

char datas[] = {'a', 'b', 'c'};

String str = new String(datas);

d、String 类型不能被继承,因为 String 是由final 修饰的。

二、String类使用步骤

1、导包

String 这个类 是 java.lang.String 包内的,不需要手动导入。

扩展:常用的如 基本数据类型,String,还有一些工具类,只要是 lang 包下面的,就不必写import 导包语句。

2、创建字符串

创建字符串的常见3+1种方式。(三种构造方法,一种直接创建)

a、构造方法创建

public String() : 初始化新创建的 String对象,以使其表示空字符序列

public String(char[] value) :通过当前参数中的字符数组来构造新的String。

public String(byte[] bytes) :通过使用平台的默认字符集解码当前参数中的字节数组来构造新的String。

Demo:

// 无参构造

String str = new String();

// 通过字符数组构造

char chars[] = {'a', 'b', 'c'};

String str2 = new String(chars);

// 通过字节数组构造

byte bytes[] = { 97, 98, 99 };

String str3 = new String(bytes);

b、直接创建

String str = "字符串内容"; // 右边直接用双引号

分析:这里面虽然没有 new 关键字,但同时创建了一个 String 对象。

三、String 对象的创建

String str = “hello”;

String  s1 = new String();   //  本质上  this.value = new char[0];

String  s2 = new String(String original);  //this.value = original.value;

String  s3 = new String(char[] a);  //this.value = Arrays.copyOf(value, value.length);

String  s4 = new String(char[] a,int startIndex,int count)

.......

图解:

21f902bb41ad7c8ad20b337aaaaca9c9.png

面试题:

(1)String str = new String("hello"); 涉及几个对象?—— 两个

(2)String str1 = new String("hello");

String str2 = new String("hello");涉及几个对象?—— 三个

四、字符串是如何存储的

字符串常量存储在字符串常量池,目的是共享。

字符串非常量对象存储在堆中。

00b6a555e9e35017e05ebc10f3b7481b.png

13e0499db3524f0835012b72c41b7468.png

字符串常量池:

1、当直接创建一个字符串时,变量会到字符串常量池中去寻找该字符串,如果找到了,该变量指向该字符串;如果没有找到,会用 byte[ ]拼接成所需的字符串,然后放入常量池中并指向它。

2、使用 new 关键字创建字符串,会在堆区创建一个 String 对象,而且底层是用 byte[ ] 数组拼接的,这个 String 对象并没有放入字符串常量池中,而是在堆中,该变量指向该对象的地址。

扩展:字符串常量池在哪里?(Oracle官方虚拟机HotSpot)

(1)JDK1.6以及之前:方法区中

(2)JDK1.7:挪到堆中,即在堆中单独划分了一块字符串常量

(3)JDK1.8:从堆中挪出,挪到一个 “元空间meta space”,即类似于方法区

五、字符串的拼接

11d4678e40124a493d5433b48df632c9.png

cf2b02a98984221bd193f0ecf43fceef.png

结论:

(1)因为只有常量池中才是共享,==比较才为 true;

(2)常量与常量的拼接结果在常量池中;

(3)只要其中有一个是变量,结果就在堆中;

(4)如果拼接的结果调用 intern() 方法,就在常量池中;

六、空字符串

1、表现方式

(1)String str = "";

(2)String str2 = new String();

(3)String str3 = new String("");

2、判断是否为空

(1)if(str != null && str.length() == 0)

(2)if(str != null && str.equals(""))

(3)if("".equals(str))  推荐

(4)if(str!=null && str.isEmpty())

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

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

相关文章

一晚啪了5只喵,累到在医院打点滴,这中国喵把英国人看傻了 | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅最近,一只叫xiaopi的中国猫在英国红了!好多媒体都报道了它…“猫咪一夜连XX 5只母喵后,累到挂点滴”《LADbible》,《Mirror》都可以看到它疲惫的小脸蛋…在《每日邮报》,xiaop…

Locations Section of OpenCascade BRep

Locations Section of OpenCascade BRep eryar163.com 摘要Abstract:本文结合OpenCascade的BRep格式描述文档和源程序,对BRep格式进行分析,详细说明BRep的数据组织形式。本文主要通过对BRep文件中的Locations部分的读写代码进行分析&#xff…

孙悟空都服输!波士顿动力最新逆天机器人视频,翻筋斗连拿大顶!

全世界只有3.14 %的人关注了青少年数学之旅刚刚,波士顿动力公司在YouTube发布了两段真正震撼的新视频:双足人形机器人Atlas展示倒立、360度翻跟头、旋转的跑酷Demo:More Parkour Atlas。四足机器人Spot的商业化广告宣传片:Spot La…

C#实例:datagridview单元格合并

这是替C#微信交流群群友做的一个小实例,目的就是在datagridview选择对应行以后,点击button后获取对应行的ip,并执行相应的操作,其实我觉得这样的话button没必要非放置到datagridview里面的!但是为了满足群友的需求&…

NO.106 需求的状态、研发阶段及注意事项。

为什么80%的码农都做不了架构师?>>> 禅道项目管理软件设计的需求有两个字段来跟踪它的变化,一个是需求的状态字段,一个是需求的研发阶段字段,下面来看下这两个字段。 一、需求的状态 需求状态(status)字段&#xff0c…

java实例化泛型_Java让泛型实例化的方法

泛型对象可以实例化吗?不可以,T tnew T()是不可以的,编译器会报错。由于泛型擦除,编译器在编译时无法确定泛型所对应的真实类型解决方法使用反射新建实例Type superclass getClass().getGenericSuperclass();ParameterizedType p…

几种人类设计的永动机,最后一个彻底服了!| 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅众所周知,永动机是违反当前客观科学规律的概念,是永远不能够被制造出来的。下面这些都是人们根据不同原理设计出来的,看一看有什么神奇之处,最后一个是亮点!▲达芬奇设计的永…

剖析WPF依赖属性

这节来讲一下WPF中的依赖属性 (Dependency Property)。【了解属性和字段】我们知道,属性是面向对象语言中用来封装字段的外衣,它像是字段对外界的桥梁,我们可以通过属性来验证数据的合法性或控制对外的访问性等等。每个属性的背后都有其对应的…

你在孩子身上偷的懒,终将会变成最大的遗憾

全世界只有3.14 %的人关注了青少年数学之旅我们来看一个非常有趣的统计:2007年—2016年全国高考状元父母职业统计最优秀的孩子大多数出自教师家庭。很家长说,教师有着和孩子一样的寒暑假,有着教书育人的先天优势,我们普通人工作忙…

开发们 点广告-赚点BT币

2019独角兽企业重金招聘Python工程师标准>>> http://freebitco.in/?r14320 转载于:https://my.oschina.net/wangtao/blog/180765

Asp.net页面的生命周期

介绍Asp.net是微软.Net战略的一个组成部分。它相对以前的Asp有了很大的发展,引入了许多的新机制。本文就Asp.net页面的生命周期向大家做一个初步的介绍,以期能起到指导大家更好、更灵活地操纵Asp.net的作用。当一个获取网页的请求(可能是通过…

太赞了!微软《dotnet中文手册》火了,完整PDF开放下载!

这是微软高级架构师基于最新的.net编写,循序渐进地对.net/C#进行讲解。对于零基础可以作为.net的快速入门教材,对于高级程序员而言,这也是你的进阶之路,今天来了,就是缘份,看到了就送给你!资料介…

你穿衣品味还不如AI,这有一款时尚着装网络模型

全世界只有3.14 %的人关注了青少年数学之旅有一件衣服的时候,怎样的小改动可以提升其整体的时尚性?近日 UT 奥斯汀、康奈尔大学、乔治亚理工和 Facebook AI 研究中心的研究者提出了一种名为 Fashon 的模型,用于给一件衣服进行改进&#xff0…

分割移动微小物体

思路&#xff1a;1. 前后两帧相减&#xff0c;得到差分图像2.在差分图像里求像素最大的点&#xff08;最亮的点&#xff09;这样就得到&#xff0c;移动微小物体#include "check.h"#include <iostream.h>voidmain(){ DWORD t1,t2; IplImage *frame0; …

一个非常实用的Python SSH库

前言 Python的Paramiko库&#xff0c;它是一个用于实现SSHv2协议的客户端和服务器的库。通过使用Paramiko&#xff0c;我们可以在Python程序中轻松地实现远程服务器的管理、文件传输等功能。特别做智能硬件产品的同学要熟悉它&#xff0c;因为它能为你减少很多麻烦&#xff0c…

在腾讯,我的试用期总结!

在腾讯的 3 个月&#xff0c;我经历了些什么&#xff1f;大家好&#xff0c;我是鱼皮。最近不少小伙伴顺利毕业&#xff0c;入职了新公司&#xff0c;开始了人生第一段正式工作经历。但对于很多公司&#xff0c;如果你想要成为正式员工&#xff0c;是需要先经历几个月的试用期的…

这6个动作,据说只有20%的人能做到!| 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅你的手指够灵活吗&#xff1f;能做出下面这些动作在回答吧。据说就是下面这6个动作&#xff0c;据说只有20%的人能做到哦&#xff01;大家不妨试试&#xff0c;看看你是不是这20%中的一员。PS&#xff1a;反正笔者已经十指已打结了...…

打造个性化的Internet Explorer

作者&#xff1a;孙辉 在Microsoft的软件哲学中&#xff0c;框架窗口是一个十分重要的角色&#xff0c;这类窗口简直无处不在。所谓框架窗口&#xff0c;就是四个窗口边上具有停靠对象能力的窗口对象&#xff0c;从现象上看&#xff0c;框架窗口有十分特别的“边”&#xff0c;…

百度家电行业报告摘录

上图反映了关注家电信息的网民在百度频道的活跃情况。很明显&#xff0c;百度贴吧、百度图片和百度知道是网民最活跃的频道&#xff0c;特别是百度贴吧&#xff0c;有超过四分之一的检索量都来自于百度贴吧。百度有不少以家电品牌或产品为主题的贴吧&#xff0c;比如海尔吧、TC…

如何识别能把桥压塌的大车?快看!能救命!

全世界只有3.14 % 的人关注了青少年数学之旅2019年10月10日晚6:10左右&#xff0c;江苏无锡市北环路附近一高架桥出现桥面侧翻&#xff0c;经现场初步勘测&#xff0c;桥下被压小车3辆&#xff08;其中一辆系停放车辆&#xff0c;无人&#xff09;。经搜救确认&#xff0c;事故…