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. 模型表单ModleForm

    官方文档网址   http://python.usyiyi.cn/documents/django_182/topics/forms/modelforms.html 模型表单的应用场景 如果你正在构建 ...

  2. 马士兵hadoop第三课:java开发hdfs(转)

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  3. 喵星球上的点名(bzoj 2754)

    Description a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣.   假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串 ...

  4. spring和resteasy 的集成方式

    spring和resteasy集成,三种主要的方式, 对于和jboss as7的集成不需要做任何工作,jboss默认集成了resteasy,只需要对业务pojo做一些jax-rs的注解标注即可.这里讲 ...

  5. C语言实验设计

    一.实验题目,设计思路,实现方法 7-4 计算分段函数[2](10 分) 本题目要求计算下列分段函数f(x)的值: 注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂. ...

  6. for循环创建对象

    有时候奇怪的发现往list添加数据的时候,一直被最后一个元素覆盖,首先 ,我们得明白原理: 在new 一个对象的时候,对象的ID是唯一确定的:将对象add入list中时,放入list中的其实是对象的引 ...

  7. Windwos2008如何关闭IE增强的安全配置

    如题 方法:

  8. WEB学习 -相对定位、绝对定位、固定定位、z-index

    相对定位 相对定位,就是微调元素位置的.让元素相对自己原来的位置,进行位置调整. .不脱标,老家留坑,形影分离 也就是说相对定位不脱标,真实位置是在老家,只不过影子出去了,可以到处飘. 3.相对定位用 ...

  9. kafka优化–JVM参数配置优化

    https://blog.csdn.net/u013063153/article/details/73826403

  10. jQuery移动端手机键盘输入车牌号代码【附加新能源车牌】

    最近在移动应用中要做到一个录取汽车牌号码的功能,在网上找了一个插件后发现没有增加新能源车牌功能, 和同事研究了一下,将其进行改造完美的实现了这个功能,这里放出该插件的源码: 原插件来自A5源码网[ht ...