String类的两种实例化方法

 A:直接赋值
public class StringDemo01{
public static void main(String args[]){
String name = "liuxun" ; // 实例化String对象
System.out.println("姓名:" + name) ;
}
};

B:通过keywordnew

public class StringDemo02{
public static void main(String args[]){
String name = new String("liuxun") ; // 实例化String对象
System.out.println("姓名:" + name) ;
}
};

String类的内容比較

以往基本数据类型才用 == 进行比較。

假设直接比較字符串呢? 例如以下所看到的:

public class StringDemo04{
public static void main(String args[]){
String str1 = "hello" ; // 直接赋值
String str2 = new String("hello") ; // 通过new赋值
String str3 = str2 ; // 传递引用
System.out.println("str1 == str2 --> " + (str1==str2)) ; // false
System.out.println("str1 == str3 --> " + (str1==str3)) ; // false
System.out.println("str2 == str3 --> " + (str2==str3)) ; // true
}
};

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


内存分析例如以下:

如今使用的推断相等,是推断地址空间是否相等。推断的是地址值。

假设要想推断其内容是否相等。则必须使用String类中提供的equals()方法完毕,该方法的使用例如以下:

public class StringDemo05{
public static void main(String args[]){
String str1 = "hello" ; // 直接赋值
String str2 = new String("hello") ; // 通过new赋值
String str3 = str2 ; // 传递引用
System.out.println("str1 equals str2 --> " + (str1.equals(str2))) ; // true
System.out.println("str1 equals str3 --> " + (str1.equals(str3))) ; // true
System.out.println("str2 equals str3 --> " + (str2.equals(str3))) ; // true
}
};



结论:String有两种比較方式。
一种是使用 == 完毕。比較的是地址值
还有一种使用equals 方法完毕,比較的详细内容,开发中比較经常使用。

String类两种实例化方式的差别

public class StringDemo07{
public static void main(String args[]){
String str1 = "hello" ; // 直接赋值
String str2 = "hello" ; // 直接赋值
String str3 = "hello3" ; // 直接赋值
System.out.println("str1 == str2 --> " + (str1==str2)+" "+str1) ; // true
System.out.println("str1 == str3 --> " + (str1==str3)+" "+str2) ; // true
System.out.println("str2 == str3 --> " + (str2==str3)+" "+str3) ; // true
}
};

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


会发现使用直接赋值的方式声明字符串时,假设该字符串的内容和别的字符串的内容同样时,则直接把具有内容同样的字符串的指向给赋值过来。假设没有发现与新声明字符串内容同样的字符串,才会开辟新的堆内存。

而使用 new String()的方式创建字符串的话,就会先开辟一个字符串的堆空间存放字符串的内容。然后通过new 再开辟一个堆空间,将第一个堆空间里的内容给复制一份拷过来,将new出来的堆空间地址赋给一个栈内存,而第一个堆空间等待GC的回收。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

一般仅仅要不是特殊情况,则使用第一种直接赋值的方式就可以。

字符串的内容不可改变

这是字符串的一个重要特征。
public class StringDemo09{
public static void main(String args[]){
String str = "hello" ; // 声明字符串
str = str + " world!!!" ; // 改动字符串
System.out.println("str = " + str) ;
}
};

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


实际上字符串内容的改变。改变的是内存地址的引用关系。 所以在开发中避免例如以下操作
public class StringDemo10{
public static void main(String args[]){
String str1 = "liuxun" ; // 声明字符串对象
for(int i=0;i<100;i++){ // 循环改动内容
str1 += i ; // 字符串的引用不断改变
}
System.out.println(str1) ;
}
};

这种操作,要断开连接100次才干够完毕。这种操作性能非常低,应该避免使用。而假设非要使用这种操作,JAVA专门提供了StringBuffer类  专门完毕这种功能。

String类的经常用法

最主要方法是查询文档

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

Split()和replaceAll()方法是须要正则匹配的。

1字符数组与字符串

一个字符串能够变为一个字符数组。相同。也能够把一个字符数组。变为一个字符串。在String类中提供了例如以下操作方法。
   将字符串变为字符数组: public char toCharArray()
   将字符数组变为字符串: public String(char[]  value)
                                            public String(char[] value,int offset, int count)

public class StringAPIDemo01{
public static void main(String args[]){
String str1 = "hello" ; // 定义字符串
char c[] = str1.toCharArray() ; // 将一个字符串变为字符数组
for(int i=0;i<c.length;i++){ // 循环输出
System.out.print(c[i] + "、") ;
}
System.out.println("") ; // 换行
String str2 = new String(c) ; // 将所有的字符数组变为String
String str3 = new String(c,0,3) ; // 将部分字符数组变为String
System.out.println(str2) ; // 输出字符串
System.out.println(str3) ; // 输出字符串
}
};

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

2从字符串中取出指定位置的字符

 假设想使用此操作。则肯定返回一个char类型  public char charAt(int index)

public class StringAPIDemo02{
public static void main(String args[]){
String str1 = "hello" ; // 定义String对象
System.out.println(str1.charAt(3)) ; // 取出字符串中第四个字符
}
};

3字符串与byte数组的转换

 byte数组(字节数组),在一般的IO操作中会常常使用到。
在String类中提供了下面的方法能够进行字符串与字节数组之间的转换。
   字符串变为字节数组:public  byte[] getBytes()
   将一个字节数组变为字符串:
        将所有字节数组变为String: public String(byte[] bytes)
        将部分字节数组变为String: public String(byte[] bytes, int offset, int length)
public class StringAPIDemo03{
public static void main(String args[]){
String str1 = "hello" ; // 定义字符串
byte b[] = str1.getBytes() ; // 将字符串变为byte数组
System.out.println(new String(b)) ; // 将所有的byte数组变为字符串
System.out.println(new String(b,1,3)) ; // 将部分的byte数组变为字符串
}
};

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

4取得一个字符串的长度

要想取得字符串的长度: public int length()  
切记:数组的长度为length不带括号。而String是个类  ,length是个方法必需要有括号。
public class StringAPIDemo04{
public static void main(String args[]){
String str1 = "hello liuxun" ; // 定义字符串变量
System.out.println("\""+str1+"\"的长度为:"+str1.length()) ;
}
};

5查找指定的字符串是否存在

在实际的操作中,常常会使用到推断一个字符串中是否存在某些内容。此时就能够使用下面的方法。
从头開始查找:public int indexOf(String str)
从指定的位置開始查找:public int indexOf(String str, int fromIndex)
查找的时候方法的返回值是一个int类型的数据,此数据表示的是一个字符串的详细位置,假设没有查找到此字符串则返回 -1.
public class StringAPIDemo05{
public static void main(String args[]){
String str1 = "abcdefgcgh" ; // 声明字符串
System.out.println(str1.indexOf("c")) ; // 查到返回位置
System.out.println(str1.indexOf("c",3)) ; // 查到返回位置,从第4个位置開始查找
System.out.println(str1.indexOf("x")) ; // 没有查到返回-1
}
};


6、去掉空格

如果如果是由用户输入的话,则就可能出现多余的空格。在这样的操作中就能够使用trim()方法去掉字符串左右的空格,可是字符串中间的空格是不可能去掉的。
public class StringAPIDemo06{
public static void main(String args[]){
String str1 = " hello " ; // 定义字符串
System.out.println(str1.trim()) ; // 去掉左右空格后输出
}
};

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

7 字符串的截取

  从一个指定的字符串中取出里面的部分内容,使用的方法。
  从指定的位置一直截取到结束位置:public String subString(int beginIndex)
  截取指定范围的字符串:public String subString(int beginIndex, int endIndex)
public class StringAPIDemo07{
public static void main(String args[]){
String str1 = "hello world" ; // 定义字符串
System.out.println(str1.substring(6)) ; // 从第7个位置開始截取
System.out.println(str1.substring(0,5)) ; // 截取0~5个位置的内容
}
};


8 拆分字符串

假设如今须要按指定的字符串去拆分一个字符串的话,则使用:public String[] split(String regex) 返回的是截取后的字符串数组。

public class StringAPIDemo08{
public static void main(String args[]){
String str1 = "hello world" ; // 定义字符串
String s[] = str1.split(" ") ; // 按空格进行字符串的拆分
for(int i=0;i<s.length;i++){ // 循环输出
System.out.println(s[i]) ;
}
}
};

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

9 大写和小写转换

此功能在一般的开发语言中都会存在。将一个大写的字符串中的所有字母所有转为小写或者将一个字符串中的所有小写字母转为大写。
  小写变大写:public String toUpperCase()
  大写变小写:public String toLowerCase()

public class StringAPIDemo09{
public static void main(String args[]){
System.out.println("将\"hello world\"转成大写:" + "hello world".toUpperCase()) ;
System.out.println("将\"HELLO WORLD\"转成小写:" + "HELLO WORLD".toLowerCase()) ;
}
};

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

10  推断是否以指定的字符串开头或结尾

在String中能够使用下面的两个方法完毕:
    推断是否以指定的字符串开头:public boolean startsWith(String prefix)
    推断是否以指定的字符串结尾:public boolean endsWith(String suffix)
public class StringAPIDemo10{
public static void main(String args[]){
String str1 = "**HELLO" ; // 定义字符串
String str2 = "HELLO**" ; // 定义字符串
if(str1.startsWith("**")){ // 推断是否以“**”开头
System.out.println("(**HELLO)以**开头") ;
}
if(str2.endsWith("**")){ // 推断是否以“**”结尾
System.out.println("(HELLO**)以**结尾") ;
}
}
};


11 不区分大写和小写的比較

在String类中equals()方法是能够用来进行字符串的比較的。可是此种比較方法仅仅能针对于大写和小写全然一样的字符串进行比較。假设如今要是想进行不区分大写和小写的比較,则能够使用下面方法:
public boolean equalsIgnoreCase(String anotherString)
public class StringAPIDemo11{
public static void main(String args[]){
String str1 = "HELLO" ; // 定义字符串
String str2 = "hello" ; // 定义字符串
System.out.println("\"HELLO\" equals \"hello\" " + str1.equals(str2)) ;
System.out.println("\"HELLO\" equalsIgnoreCase \"hello\" "
+ str1.equalsIgnoreCase(str2)) ; // 不区分大写和小写的比較
}
};

12  字符串的替换功能

在String类中提供了下面的方法用于字符串的替换操作。

 public String replaceAll(String regex, String replacement)
public class StringAPIDemo12{
public static void main(String args[]){
String str = "hello" ; // 定义字符串
String newStr = str.replaceAll("l","x") ; // 如今将全部的l替换成x
System.out.println("替换之后的结果:" + newStr) ;
}
};




面向对象基础——String类的更多相关文章

  1. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

  2. Java基础:String类详解,案例用户登录实现,案例手机号截取实现,案例敏感词替换实现;StringBuilder类详解,StringBuilder和String相互转换,附练习案例.

    1.API 1.1 API概述-帮助文档的使用 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK ...

  3. Java基础String类

    String是一个对象 String不属于8种基本数据类型(byte, char, short, int, float, long, double, boolean),String是对象,所以其默认值 ...

  4. Java基础—String类小结

    一.String类是什么 public final class String implements java.io.Serializable, Comparable<String>, Ch ...

  5. Java基础---String类和基本数据类型包装类

    第一讲     String类 一.概述         String是字符串的类类型,用于描述字符串事物.字符串是一个特殊的对象.特殊之处就在于: Stings= new String();和Str ...

  6. Java基础——String类(二)

    今天做了几道String常见操作.先来几个代码实例: 例一:此方法,仅把字符串前后出现的空格去掉了,中间部分不会. class TestTrim { public static void main(S ...

  7. Java基础——String类(一)

    一.String 类代表字符串 Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串 ...

  8. [Java基础]——String类

    此篇博客主要整理Java中的String类的使用. 一.String    1.1  String 的定义 上图是jdk中对String类的定义,得到的信息有: ①.String类声明为final的, ...

  9. python3 速查参考- python基础 8 -> 面向对象基础:类的创建与基础使用,类属性,property、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)

    基础概念 1.速查笔记: #-- 最普通的类 class C1(C2, C3): spam = 42 # 数据属性 def __init__(self, name): # 函数属性:构造函数 self ...

随机推荐

  1. ACE的饼图显示保留两位小数

    修改源js文件:jquery.flot.pie.min.js <script src="/static/assets/js/jquery.flot.pie.min.js"&g ...

  2. Django的日志中关闭elasticsearch模块的日志

    今天用python的日志模块,为Django项目配置了日志,运行的时候发现日志在疯狂的涨,检查后发现竟然是elasticsearch的日志,但是我没有打这个日志啊,根据日志提供的文件位置,我在elas ...

  3. PHP文件函数

    PHP文件函数 函数 描述 PHPbasename() 返回路径中的文件名部分. 3chgrp() 改变文件组. 3chmod() 改变文件模式. 3chown() 改变文件所有者. 3clearst ...

  4. 一次完整的http请求过程以及网络I/O模型select、epoll

    a.一次完整的http请求过程 1.域名解析,得到域名对应的IP; 2.三次握手,客户端与服务器通过socket建立TCP/IP连接; 3.浏览器向服务器发送http请求,如:GET/index.ht ...

  5. awk理论详解、实战

    答疑解惑: 为什么用awk取IP的时候用$4? ifconfig eth0 | awk -F '[ :]+' 'NR==2{print $4}' IP第二行内容如下: inet addr:10.0.0 ...

  6. POJ 3660 Cow Contest 传递闭包+Floyd

    原题链接:http://poj.org/problem?id=3660 Cow Contest Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

  7. CodeForces - 600F Edge coloring of bipartite graph

    Discription You are given an undirected bipartite graph without multiple edges. You should paint the ...

  8. 第4章 使用 Spring Boot

    使用 Spring Boot 本部分将详细介绍如何使用Spring Boot. 这部分涵盖诸如构建系统,自动配置以及如何运行应用程序等主题. 我们还介绍了一些Spring Boot的最佳实践(best ...

  9. IE使用多彩文档上传数据库报错

    使用多彩文档,用IE浏览器提交表单,双引号里面包含单引号,导致数据库插入不了,而用chrome浏览器不会报错,自动过滤单引号, 解决:content.replace("'", &q ...

  10. Spring Boot中使用AOP记录请求日志

    这周看别人写的springboot后端代码中有使用AOP记录请求日志,以前没接触过,因此学习下. 一.AOP简介 AOP为Aspect Oriented Programming的缩写,意为:面向切面编 ...