文档章节

java基础---->String类

小强斋太
 小强斋太
发布于 2016/11/09 20:07
字数 1340
阅读 1
收藏 0
点赞 0
评论 0

String

 匿名对象

new  Person("张三",30).tell() ;

由于匿名对象没有对应的栈内存所指向,所以使用一次之后就等待被垃圾回收了。

1String在使用中有两种实例化的方法

一种是采用直接赋值(将字符串赋String的对象),

String str = "Hello" ;    //定义一个字符串

第二种方法是通过构造方法完成实例化的操作,

String str = new String("Hello");  //定义一个字符串

一个字符串就是一个String的匿名对象

区别:

第一种 String str = "Hello" ;按照之前的理解,现在肯定是将一个字符串的堆空间的地址给str,所以图形如下:

   此时的代码中,只在堆内存中开辟了一块空间,但是如果现在是第二种方式:

  String str = new String("Hello") ;使用构造方法进行对象实例化的时候,由于内部的字符串属于匿名对象的原因,所以将产生两块堆内存空间,其中有一块将成为垃圾。

  除了内存空间的少之外,如果使用了直接赋值现在还有另外一种好处,就是如果以后如果再声明了与之一样的字符串的话,则不会再重新开辟新的内存空间

public class StringDemo {

      public static void main(String  args[]){

           String str1 =  "hello" ;

           String str2 =  "hello" ;

           String str3 =  "hello" ;

           System.out.println("str1  == str2 --> " + (str1==str2)) ;    //  true

           System.out.println("str1  == str3 --> " + (str1==str3)) ;    //  true

           System.out.println("str2  == str3 --> " + (str2==str3)) ;    //  true

      }

};

此时返回的结果都是true,所以很明显,以上的三个String的对象都同时指向同一个堆内存空间的“hello”字符串,那么如果使用的是构造方法赋值的话,根本不可能实现此效果。

       之所以内容会相等,是因为在JAVA底层中存在了一个字符串的对象池,每次的内容都会从池中取出,如果内容已经存在了,则使用已经存在的,如果不存在,则会生成一个新的,放入池中,属于共享设计模式

       由于这种原因,只要是使用String类的话,永远都要采用直接赋值的方式完成。

2、字符串的比较

只要是字符串的比较操作就统一都使用equals()方法完成。

两种比较的区别:==equals()

      · ==:用于数值比较,比较的是两个字符串的地址值

      · equals():用于内容的比较,比较两个字符串的内容是否相等

3、字符串的内容一旦声明则不可改变

       一个字符串肯定是保存在堆内存之中的,所以一旦一个字符串声明之后,则无法改变。

public class StringDemo08 {

         public static void main(String args[]){

                   String str = "hello" ;

                   str = str + " world" ;

                   str += " !!!" ;

                   System.out.println(str) ;

         }

};

通过内存图可以发现一点,每一个字符串的内容原本并没有发生任何的改变,改变的是只一个字符串的内存地址的指向(断开旧连接,指向新连接),而且操作完成之后会发现有很多的垃圾产生,所以,以后对于频繁修改字符串的代码应该尽可能的回避,使用stringBuffer代替。

4String类的相关操作

字符串与字符数组 

No.

方法名称

类型

描述

1

public String(char[] value)

构造

将一个字符数组全部变为字符串

2

public String(char[]  value,int offset,int count)

构造

将一个字符数组的指定范围的内容变为字符串

3

public char[] toCharArray()

普通

将字符串变为字符数组

4

public char charAt(int  index)

普通

返回指定位置的字符

5

public int length()

普通

求出字符串的长度

 字符串与字节数组:

No.

方法名称

类型

描述

1

public String(byte[] bytes)

普通

将字节数组变为字符串

2

public String(byte[]  bytes,int offset,int length)

普通

将指定范围的字节数组变为字符串

3

public byte[] getBytes()

普通

将字符串变为字节数组

字符串比较

1

public boolean  equalsIgnoreCase(String anotherString)

普通

忽略大小写的比较

字符串截取

1

public String substring(int  beginIndex)

普通

从指定位置截取到末尾

2

public String substring(int  beginIndex,int endIndex)

普通

截取指定范围的内容

判断字符是否存在

1

public int indexOf(String  str)

普通

从头开始判断,如果找到则返回位置,找不到返回-1

2

public int indexOf(String  str,int fromIndex)

普通

从指定位置开始查找,如果找到则返回位置,找不到返回-1

3

public boolean contains(String s)

普通

直接判断是否存在

字符串拆分

1

Public String[] split(String regex)

普通

按照指定字符串拆分

在进行字符串拆分的时候,如果发现有某些字符串无法拆分,则使用转义。

String str ="192.168.1.3" ;

String s[] =str.split("\\.") ;

字符串替换

1

public String replaceAll(String regex,String  replacement)

普通

全部替换

2

public String replaceFirst(String regex,String  replacement)

普通

替换第一个满足的内容

其他操作

No.

方法名称

类型

描述

1

public String toLowerCase()

普通

转小写

2

public String toUpperCase()

普通

转大写

3

public String trim()

普通

去掉左右空格

4

public boolean startsWith(String prefix)

普通

判断是否以指定的字符串开头

5

public boolean endsWith(String suffix)

普通

判断是否以指定的字符串

 

本文转载自:http://www.cnblogs.com/xqzt/archive/2012/07/31/5637276.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
java编程新手入门学习的基础语法

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/28 ⋅ 0

Java开发每日复盘2018_0514

今天主要跟大家分享3个部分: 一、「Java的核心机制」 二、「Java命名规范」 三、「Java数据类型相关」 下面我们来一个一个的说: 「Java核心机制」 Java是一种强制面向对象的解释型语言(O...

ZeroOSTalk ⋅ 05/14 ⋅ 0

Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

gradle/Groovy语法

Groovy官网的介绍(http://www.groovy-lang.org/download.html#gvm) Gradle API 文档: https://docs.gradle.org/current/dsl/org.gradle.api.invocation.Gradle.html 深入理解Android(一)......

shareus ⋅ 04/27 ⋅ 0

Java基础|Java特性与HelloWorld运行流程

【Java基础】 Java语言特点:(着重了解两个)开源、跨平台。 跨平台如何实现:通过JVM实现,JVM充当Java和不同OS之间的翻译器,不同OS对应不同JVM。 Java语言的平台:JavaSE、JavaME(Androi...

darlingwood2013 ⋅ 05/29 ⋅ 0

你所需要的java提升篇大总结

java基础篇深入解析大总结 java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规则 java基础(三) 加强型for循环与Iterator java基础(四) java运算顺序的深入解析 java基础(五) Str...

sihailoveyan ⋅ 04/25 ⋅ 0

java编程新手入门基础知识学习

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/15 ⋅ 0

java开发中的常用的设计模式

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代...

qq_38024548 ⋅ 05/28 ⋅ 0

JDBC中Class.forName()的作用

使用JDBC时,我们都会很自然得使用下列语句: java 代码 Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8"; ......

村长大神 ⋅ 2014/05/09 ⋅ 0

做几道基础的Java测试题,看看最近有进步吗?欢迎来学习

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

启示录是真的 ⋅ 05/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA入门,配置文件的设置

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http......

码农屌丝 ⋅ 16分钟前 ⋅ 0

Java基础——面向对象和构造器

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 静态成员介绍 为什么要有静态成员?静态成员用来...

凯哥学堂 ⋅ 18分钟前 ⋅ 0

vmware中Centos 7 linux的LVM磁盘扩容

系统是RHEL7(centos7差不多一样) 关闭系统,在vmware、设置、硬盘、扩展、输入数字大于当前系统内存、点击扩展。 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还...

gugudu ⋅ 28分钟前 ⋅ 0

JAVA线程sleep和wait方法区别

昨天面试,突然被问到sleep 和 wait的区别,一下子有点蒙,在这里记一下,以示警戒。 首先说sleep,sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过去后,cpu...

徐玉强 ⋅ 30分钟前 ⋅ 0

vuex学习--模块

随着项目复杂性增加,共享状态也越来越多。需要对转态操作进行分组,分组后在进行分组编写。学习一下module:状态管理器的模块组操作。 首先是声明: const moduleA={ state,mutations,g...

大美琴 ⋅ 32分钟前 ⋅ 0

Selenium 简单入门

安装 pip install selenium 驱动下载 https://chromedriver.storage.googleapis.com/index.html 下载最新的驱动,放入path中,可以放入Python的scripts目录下,也可以放入Chrome安装目录,并...

阿豪boy ⋅ 34分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 今天 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部