String代表字符串,在Java中,所有的字符串字面值都作为此类的实例实现

字符串的特点以及简单的原理分析:

package demo;
/*
* String类的特点:
* 所有的""都是String的对象
* 字符串一旦创建就是常量,不能改变
*/
public class StringDemo {
public static void main(String[] args) {
//发现创建对象不需要new
String str = "abcd";
System.out.println(str);
//输出:abcd而不是内存地址,因为String类重写了toString方法
str = "efgh";
System.out.println(str);
//输出:efgh,之前不是说常量不能改变吗?这里的原因:
//字符串本身是一个对象,在堆内存中,字符串本质是一个字符的数组
//源码:private final char value[];有final修饰,因此String是常量
//str = "efgh"是在内存中重新开一片,str的指向改变了,而"abcd"字符串对象没有改变 }
}

String类的创建方式和比较:

package demo;

public class StringDemo {
public static void main(String[] args) {
//字符串定义的两种方式,直接=,使用String的构造方法
String str1 = new String("abc");
String str2 = "abc";
//直接=更为方便,但是存在区别 System.out.println(str1==str2);//false
System.out.println(str1.equals(str2));//true //使用构造方法定义原理:
//实际上创建了两个对象,一个是new String对象,一个是"abc"对象
//而new String对象中保存了"abc"这个字符数组对象的地址
//str1指向new String对象
//打印str1的时候,调用重写的toString方法找到字符串 //由于"abc"对象已经存在
//所以str2直接指向"abc"对象,不创建新的对象
//因此,str1==str2为false,因为对象的地址不同
//而str1.equals(str2)是true,原理:
//String类继承Object,重写了父类方法equals,建立了字符串自己的字符串比较方式
//即只要字符串的每个字符相同就是true,与地址无关
}
}

String类的构造方法:

1.官方资料:String(byte[] byte)    通过使用平台的默认字符集解码指定的byte数组,构造一个新的String

示例:

package demo;
/*
* String类的构造方法
*/
public class StringDemo2 {
public static void main(String[] args) {
byte[] bytes = {97,98,99,100};
String s = new String(bytes);
System.out.println(s);
//输出:abcd
//将字节数组中的每个字节,查询编码表得到的结果
}
}

2.官方资料:String(byte[] byte, int offset, int length)

示例:

package demo;
/*
* String类的构造方法
*/
public class StringDemo2 {
public static void main(String[] args) {
byte[] bytes = {65,66,67,68,69};
String s = new String(bytes, 2 ,3);
//第二个参数是起始索引,第三个参数是选取个数
System.out.println(s);
//输出:CDE
}
}

3.官方资料:String (char[] value) 分配一个新的String,使其表示字符数组参数中当前包含的字符序列

示例:

package demo;
/*
* String类的构造方法
*/
public class StringDemo2 {
public static void main(String[] args) {
function();
}
public static void function(){
char[] ch = {'a','b','c','d','e'};
String s = new String(ch);
System.out.println(s);
}
}
//输出:abcde

4.和前两个相似,官方资料:String(char[] value, int offset, int length)

示例:

package demo;
/*
* String类的构造方法
*/
public class StringDemo2 {
public static void main(String[] args) {
function();
}
public static void function(){
char[] ch = {'a','b','c','d','e'};
String s = new String(ch,1,3);
System.out.println(s);
}
}
//输出:bcd

还有很多的构造方法,不过常用的是这些

String类的其他方法:

1.官方资料:int length() 返回此字符串的长度(比较简单,不做示例了)

2.官方资料:String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串

另一个:String substring(int beginIndex,int endIndex) 同上,多了一个结束索引值

示例:

package demo;

public class StringDemo2 {
public static void main(String[] args) {
function();
}
public static void function(){
String str = "iamhandsome";
String str1 = str.substring(3);
String str2 = str.substring(3, 5);
System.out.println(str1);
System.out.println(str2);
}
}
/*输出:
handsome
ha 这里注意,区间是左闭右开,意思是包括起始索引,不包括终止索引
*/

3.官方资料:boolean startsWith(String prefix)

        测试字符串是否以指定的前缀开始

        有前缀也应该有后缀:

          boolean endWith(String suffix)

4.官方资料:boolean contains(String s)判断一个字符串中是否包含另一个字符串

5.int indexOf(char ch) 查找一个字符在字符串中第一次出现的索引

3,4,5示例:

package demo;

public class StringDemo2 {
public static void main(String[] args) {
function();
} public static void function() {
String string = "Iamhandsome";
boolean b = string.startsWith("Ia");
System.out.println(b);// true
boolean b1 = string.endsWith("ome");
System.out.println(b1);// true
boolean b2 = string.contains("hand");
System.out.println(b2);//true
int a = string.indexOf("a");
System.out.println(a);//
}
}

6.将字符串转成字节数组:

  byte[] getBytes()

  此功能和String的构造方法相反

示例:

package demo;

public class StringDemo2 {
public static void main(String[] args) {
function();
} public static void function() {
String str = "abc";
byte[] bytes = str.getBytes();
for(int i=0; i<bytes.length; i++){
System.out.println(bytes[i]);
}
}
}
/*输出:
97
98
99
*/

7.将字符串转成字符数组:char[] toCharArray();

package demo;

public class StringDemo2 {
public static void main(String[] args) {
function();
} public static void function() {
String str = "abc";
char[] chars = str.toCharArray();
for(int i=0; i<chars.length; i++){
System.out.println(chars[i]);
}
}
}
/*输出:
a
b
c
*/

比较字符串是否相同

示例:

package demo;

public class StringDemo2 {
public static void main(String[] args) {
function();
} public static void function() {
String str1 = "Abc";
String str2 = "abc";
boolean b1=str1.equals(str2);
boolean b2 = str1.equalsIgnoreCase(str2);
System.out.println(b1);//false
System.out.println(b2);//true
//比较字符串是否相同,第二个忽略大小写
}
}

Java学习笔记19(String类)的更多相关文章

  1. java学习笔记之String类

    String类总结 String类概述: java.lang.String 类是字符串操作类 String类的常用构造方法: //1.直接赋值 String str= "hellojava& ...

  2. Java学习笔记 02 String类、StringBuilder类、字符串格式化和正则表达式

    一.String类一般字符串 声明字符串 >>String str 创建字符串 >>String(char a[])方法用于将一个字符数组创建为String对象 >> ...

  3. java学习笔记5——String类常用方法

    1.字符串长度计算: int i = String1.length(); 2.字符串比较:1) equals()和equalsIgnoreCase //比较两个字符串对象的实体是否相同,相同输出tru ...

  4. java学习笔记7--抽象类与抽象方法

    接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...

  5. Java学习笔记16---抽象类与接口的浅显理解

    抽象类是由abstract修饰的类,定义方式如public abstract class A{...}. 接口由interface修饰,定义方式如public interface B{...}. 抽象 ...

  6. 【原】Java学习笔记031 - 常用类

    package cn.temptation; public class Sample01 { public static void main(String[] args) { /* * 类 Math: ...

  7. 1.9(java学习笔记)object类及toString()与equals()方法

    object类 java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类. 例如 class Person {......};和class Person e ...

  8. Java学习笔记day06_自定义类_ArrayList

    1.自定义类class 使用类的形式, 对现实中的事物进行描述. 类是引用数据类型. 事物: 方法,变量. 方法:事物具备的功能. 变量:事物的属性. 格式: public class 类名{ //属 ...

  9. Java学习笔记(2)——有关类

    Java类的高级特性: {Java管理文件机制:类包. 同一个包中的类互相访问时,可以不指定包名. 同一个包中的类不必存放在同一位置,如com.lang.class1和com.lang.class2可 ...

随机推荐

  1. MySQL · 引擎特性 · InnoDB 事务系统

    前言 关系型数据库的事务机制因其有原子性,一致性等优秀特性深受开发者喜爱,类似的思想已经被应用到很多其他系统上,例如文件系统等.本文主要介绍InnoDB事务子系统,主要包括,事务的启动,事务的提交,事 ...

  2. 简单理解OpenGL模型视图变换

    前几天学习了OpenGL的绘图原理(其实就是坐标的不停变换变换),看到网上有个比较好的例程,于是学习了下,并在自己感兴趣的部分做了注释. 首先通过glMatrixMode(GL_MODELVIEW)设 ...

  3. 自己主动化 远程登陆linuxserver并运行命令 —— expect

    原文地址:http://blog.csdn.net/wangyuling1234567890/article/details/41149429 LinuxserverA登陆LinuxserverB s ...

  4. Android学习笔记(10).布局管理器

    布局管理器的几个类都是ViewGroup派生的,用于管理组件的分布和大小,使用布局管理器能够非常好地解决屏幕适配问题. 布局管理器本身也是一个UI组件,布局管理器能够相互嵌套使用,以下是布局管理器的类 ...

  5. hibernate5(9)注解映射[1]多对一单向关联

    在博客站点中,我们可能须要从某一篇文章找到其所关联的作者.这就须要从文章方建立起对用户的关联,即是多对一的映射关系. 如今先看一个配置实例:我们的文章实体类 package com.zeng.mode ...

  6. 牛腩新闻公布系统--学习Web的小技巧汇总

    2014年11月10日,是个难忘的日子.这一天.小编的BS学习開始了.BS的开头,从牛腩新闻公布系统開始.之前学习的内容都是CS方面的知识,软考过后.開始学习BS,接触BS有几天的时间了,跟着牛腩老师 ...

  7. Asp.net mvc 知多少(一)

    本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...

  8. 七、Spring Boot Servlet 使用

    Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet.Filter.Listener.Interceptor 等等. 当使用spring-Boot时,嵌 ...

  9. nginx+redis实现session的共享

    上一篇我们介绍了nginx实现的负载均衡和动静分离,可看这边. 我们在文章的末尾说到,负载均衡需要面临的一个问题是内存数据的同步.例如:我有A,B两台服务器做了负载均衡,当我在A服务器上执行了登录并且 ...

  10. 多线程编程学习笔记——async和await(三)

    接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五.   处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...