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…

放假的第二天

嗯...今天是放假的第二天.感觉昨天过了好漫长的一天哦,长得都有好几年了....昨天早上和某军去爬山,蛮惊喜的实话的说,可是快到山顶的时候罗打电话给某军说高二化学(2)要照相,某军却骗她说他正和一男孩儿爬山,男孩儿.....我....纠结.....后来过了好久,我们终于从山上下来了,赶到…

Locations Section of OpenCascade BRep

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

2007武汉.NET俱乐部沙龙-VS2008、WPF、Silverlight

即将进入2008年,激动人心的一年。微软也将活跃起来,讨论微软技术发展的最新趋势,产品与解决方案的商业价值,新技术对未来行业的影响,使您以饱满的激情碰撞2008!与此同时,微软又带给开发人员什么…

java long to float_为什么Java中long可以自动转换成float

Java中,long型是64位的,float型是32位的。为什么long型可以自动转float型呢?这里就涉及到浮点数在内存中的存储问题了。对于byte,short,int,long四个整数类型而言,它们在内存中无一例外都是直接换算成二进…

C# 枚举(Enum)

在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。[1] 是一个被命名的整型常数的集合,枚举在日常生活中很常见&#xff0c…

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

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

痛并快乐着

看到访问量不断增加,而且访问过的人数已经超过500人(注意不是浏览次数,而是不同的人数),真有成就感。与此同时,申请网易联盟再次失败,决定好好写我自己的blog,不再去管他什么狗屁联盟…

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

vista 中php4, php5 共存

由于有些开源PHP产品需要PHP4,因为不得不安装这个版本,如OSC2.1;而有些开源产品则使用PHP5,如wikipedia,因此为了同时开发 PHP4或PHP5的软件,则需要同时安装这两个版本的东西。 安装PHP4使用IIS的具体操作请…

剖析WPF依赖属性

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

Spring与SpringMVC集成出现的问题

这几天在学习SpringMVC,在与Spring集成时,出现了两个小问题,记录下来,提醒自己,同时如果大家遇到同样问题,能够帮助大家的话,那我就感到幸哉了!1.java.lang.NullPointerExceptionSEV…

java drawline_Java Graphics.drawLine方法代码示例

import javax.microedition.lcdui.Graphics; //导入方法依赖的package包/类public void draw(Graphics g) {g.setColor(255, 255, 255);g.fillRect(0, 0, getWidth(), getHeight());g.setColor(200, 200, 200);int baseLineY;if (signal.baseLineY() > 0) {baseLineY (int)…

Active Directory的用户属性说明

Active Directory中User对象属性User Object User Interface Mapping The following tables identify the property pages supplied by the Active Directory Users and Computers snap-in. Each table identifies the user interface elements of the property page and the A…

柳传志与马云绸缪宏观经济“冬天影子”

春江水暖鸭先知。尽管认同中国经济的繁荣将继续保持10~20年,中国商界的领军者和经济学家上周六还是提醒企业必须警惕可能到来的调整。 “我为什么上市?一个很重要的原因,是我在准备‘过冬’。”12月8日,在“2007(第六届)中国企业领…

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

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

巧用Environment.UserInteractive 实现开发和生产环境的分开调试部署

概述平常我们在做服务开发的时候,经常是希望本地可以直接调试;在生产环境是以服务允许的;这时候,一般的做法写2段代码,需要什么环境就注释那段代码,这样很麻烦,这时候就可以利用Environment判断…