Maison > Java > javaDidacticiel > Classe de chaîne de base Java

Classe de chaîne de base Java

ringa_lee
Libérer: 2017-06-22 16:45:17
original
1532 Les gens l'ont consulté

La classe


一、String représente la chaîne

Tous les littéraux de chaîne (tels que "abc") dans les programmes Java sont représentés comme cette classe implémentation d'instance.

Les chaînes sont des constantes ; leurs valeurs ne peuvent pas être modifiées après leur création. Les tampons de chaînes prennent en charge les chaînes mutables. Les objets String étant immuables, ils peuvent être partagés. Par exemple :

1

String str = "abc";
Copier après la connexion

est équivalent à :

char data[] = {'a', 'b', 'c'}; 2 String str = new String(data);
Copier après la connexion


Vous trouverez ci-dessous quelques autres exemples d'utilisation des chaînes :

1 System.out.println("abc");2      String cde = "cde";3      System.out.println("abc" + cde);4      String c = "abc".substring(2,3);5      String d = cde.substring(1, 2);
Copier après la connexion

String La classe comprend des méthodes qui peuvent être utilisées pour vérifier les caractères individuels d'une séquence, comparer chaînes, recherchez une chaîne, extrayez des sous-chaînes, créez une copie de la chaîne et convertissez tous les caractères en majuscules ou minuscules. Le mappage de casse est basé sur la version standard Unicode spécifiée par la classe Character.

Le langage Java offre un support spécial pour le symbole de concaténation de chaîne ("+") et pour la conversion d'autres objets en chaînes. La concaténation de chaînes est implémentée via la classe StringBuilder (ou StringBuffer) et sa méthode append. La conversion de chaîne est implémentée via la méthode toString, qui est définie par la classe Object et héritée par toutes les classes en Java. Pour plus d'informations sur la concaténation et la conversion de chaînes, consultez la spécification du langage Java de Gosling, Joy et Steele.

Sauf indication contraire, passer un argument null à un constructeur ou à une méthode de cette classe lèvera une exception de pointeur nul.

String représente une chaîne au format UTF-16 dans laquelle les caractères supplémentaires sont représentés par des paires de substitution. La valeur de l'index fait référence à l'unité de code char, le caractère supplémentaire occupe donc deux positions dans le String. La classe

String fournit des méthodes pour travailler avec des points de code Unicode (c'est-à-dire des caractères) et des unités de code Unicode (c'est-à-dire des valeurs char).

2. Comment créer une chaîne

1 String s="abc"; > signifie que vous créez d'abord une référence s sur la pile, elle ira d'abord dans le pool de constantes pour voir s'il existe la constante "abc". Si c'est le cas, pointez s vers "abc" dans le pool de constantes.

Sinon, créez abc dans le pool de constantes,

1

String s=new String("abc"); 🎜> est équivalent à String obj="abc"; String s=new String(obj); Après cette opération, il y a deux copies de données en mémoire : une dans le pool de constantes et une sur le tas. En raison de la nouvelle opération, qu'il y ait ou non "abc" dans le pool constant, elle créera une copie sur le tas

3. Comparaison des chaînes

Exemple 1 : Utilisation du pool de constantes de chaîne

Exemple 2 : La différence entre == et égal à String
1 String s0 = "abc"; 
2 String s1 = "abc"; 
3 System.out.println(s0==s1); //true 
4 //s0  和  s1 都指向了常量池中的同一个 "abc"
Copier après la connexion

Exemple 3 : Déterminé au moment de la compilation
1 String s0 =new String ("abc");   //new 这个操作,将在堆上产生对象,s0指向了堆2 String s1 =new String ("abc"); 
3 System.out.println(s0==s1); //false  s0 和 s1 指向的是堆上不同de的对象System.out.println(s0.equals(s1)); //true 因为String类重写了equals方法,比的是实体的内容
Copier après la connexion

Exemple 4 : Impossible de déterminer au moment de la compilation
1 String s0="helloworld";2 String s1="helloworld";3 String s2="hello" + "world";   //编译的时候,直接就编译成了 helloworld4 System.out.println( s0==s1 );   //true5 System.out.println( s0==s2 );   //true
Copier après la connexion

Exemple 5 : Optimisation au moment de la compilation
1 String s0="helloworld";2 String s1=new String("helloworld");3 String s2="hello" + new String("world");4 System.out.println( s0==s1 ); //false  一个指向常量池,一个指向堆System.out.println( s0==s2 ); //false5 System.out.println( s1==s2 ); //false
Copier après la connexion

Exemple 6 Impossible de déterminer au moment de la compilation
 1 String s0 = "a1"; 2 String s1 = "a" + 1; 3 System.out.println((s0 == s1)); //true 4                    5 String s2 = "atrue"; 6 String s3= "a" + "true"; 7 System.out.println((s2 == s3))  //true 8                    9 String s4 = "a3.4";10 String s5 = "a" + 3.4;11 System.out.println((s4 == s5));  //true
Copier après la connexion

Exemple 7 : Déterminé au moment de la compilation
1 String s0 = "ab";2 String s1 = "b";3 String s2 = "a" + s1;   //s1不是常量,编译期无法确定4 System.out.println((s0 == s2)); //false
Copier après la connexion

四、String对象内存分析

//例一

String a = "abc"; ①  

String b = "abc"; ② 

分析:

①代码执行后在常量池(constant pool)中创建了一个值为abc的String对象,

②执行时,因为常量池中存在 "abc" 所以就不再创建新的String对象了。

//例二

String c = new String("xyz");①  

String d = new String("xyz");②  

分析:

①Class被加载时,"xyz"被作为常量读入,在常量池(constant pool)里创建了一个共享的值为"xyz"的String对象;

然后当调用到new String("xyz")的时候,会在堆(heap)里创建这个new String("xyz")对象;

②由于常量池(constant pool)中存在"xyz"所以不再创建"xyz",然后创建新的new String("xyz")。

//例三

String s1 = new String("xyz"); //创建二个对象(常量池和堆中),一个引用   

String s2 = new String("xyz"); //创建一个对象(堆中),并且以后每执行一次创建一个对象,一个引用   

String s3 = "abc"; //创建一个对象(常量池中),一个引用   

String s4 = "abc"; //不创建对象(共享上次常量池中的数据),只是创建一个新的引用s4)

//例四

 public static void main(String[] args) {    
 //以下两条语句创建了1个对象。"凤山"存储在字符串常量池中     3 String str1 = "凤山";    
 String str2 = "凤山";     
 System.out.println(str1==str2);//true     
 //以下两条语句创建了3个对象。"天峨",存储在字符串常量池中,两个new String()对象存储在堆内存中      7 String str3 = new String("天峨");     
 String str4 = new String("天峨");     
 System.out.println(str3==str4);//false      
//以下两条语句创建了1个对象。9是存储在栈内存中   //这里所说的一个对象,是指的9 , i 和 j 则是对9的引用  11 int i = 9;     
int j = 9;     
System.out.println(i==j);//true      
//由于没有了装箱,以下两条语句创建了2个对象。两个1对象存储在堆内存中    15 Integer l1 = new Integer(1);    注意这里是没有装箱操作的16 Integer k1 = new Integer(1);    
System.out.println(l1==k1);//false  18  //以下两条语句创建了1个对象。1对象存储在栈内存中。自动装箱时对于值从127之间的值,使用一个实例。    19 Integer l = 20;//装箱     20 Integer k = 20;//装箱     21 System.out.println(l==k);//true    22 Integer i1 = 256;     //以下两条语句创建了2个对象。i1,i2变量存储在栈内存中,两个256对象存储在堆内存中   23 Integer i2 = 256;     
System.out.println(i1==i2);//false  25 }
Copier après la connexion

五、String 类常见操作

字符串的常见操作,大致有以下几类 获取,判断,转换,替换和切割

1) 获取类操作

String str="春花秋月何时了,往事知多少?小楼昨夜又东风,故国不堪回首月明中";

1 这个字符串到底有多长

2 第4个字是什么 即根据索引获取字符

3 第一个逗号是第几个字符 即根据字符取索引( 取字符(或字符串)的位置)

4 最后一个“月”字的索引

5 是否含有“月明” 这个字符序列

6 是不是以"春花"开头,是否以“月明中”结尾

7 这个串是否为空

8 是否和另一个串相等

String str="春花秋月何时了,往事知多少?小楼昨夜又东风,故国不堪回首月明中";
System.out.println("长度:" + str.length());  //31
System.out.println("第四个字是"+str.charAt(3)); //月
System.out.println("第一个逗号的位置是"+str.indexOf(',')); //7
System.out.println("第一个逗号的位置是"+str.indexOf(",")); //7
System.out.println("第一个往事的位置是"+str.indexOf("往事")); //8
System.out.println("最后一个月字的索引"+str.lastIndexOf("月")); //28
System.out.println("是否含有月明"+str.contains("月明"));  //true
System.out.println("是否以春花开头"+str.startsWith("春花"));  //true
System.out.println("是否以月明中结尾"+str.endsWith("月明中"));  //true
System.out.println("是否为空"+str.isEmpty());  //false
System.out.println(str.equals("另一个字符串")); //false
String s1="abc";
String s2="aBC";
System.out.println(s1.equalsIgnoreCase(s2));  //true  equalsIgnoreCase 比较的时候忽略大小写。
Copier après la connexion


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal