Java基础——String

前言

  从去年八月末开始工作一年了,有了大半年的java开发经验,自认为比在大学时候编码能力强了很多,但是基础方面叫不准的地方感觉越来越多了 (;′д`)ゞ

所以,我准备把这些问题以及工作中遇到的问题总结,记录下来,造福自己和大家~ヾ(o?ω?)?   当然,如果大家发现我哪里写的有错误,欢迎在下方评论指出来。

那我们开始吧!

String

  1.String是一个final类,不能被继承

  2.String底层维护是一个数组,静态创造一个字符串时,此字符串存在于String池,当下一个String对象也是静态创建的时候,先去String池里找是否有和新对象一样的,

如果有,指向新对象,否则创建新对象。

  下面内容引用 https://blog.csdn.net/weixin_38722500/article/details/81134952 以解释第二条

  (1)

1 String str1 = "abc";
2 System.out.println(str1 == "abc"); 

  步骤:

  1)栈中开辟一块空间存放引用str1

  2)String池中开辟一块空间,存放String常量"abc"

  3)引用str1指向池中String常量"abc"

  4)str1所指代地址即常量"abc"所在地址,输出为true

  (2)

1 String str2 = new String("abc");
2 System.out.println(str2 == "abc"); 

  步骤:

  1)栈中开辟一块空间存放引用str2

  2)堆中开辟一块空间存放一个新建的String对象"abc"

  3)引用str2指向堆中的新建的String对象"abc"

  4)str2所指代地址即常量"abc"所在地址,而常量"abc"地址在池中,输出为false

  (3)

1 String str3 = new String("abc");
2 System.out.println(str3 == str2); 

  步骤:

  1)栈中开辟一块空间存放引用str3

  2)堆中开辟一块新空间存放另外一个(不同于str2所指)新建的String对象

  3)引用str3指向另外新建的那个String对象

  4)str3和str2指向堆中不同的String对象,地址也不相同,输出为false

  (4)

1 String str4 = "a" + "b";
2 System.out.println(str4 == "ab"); 

  步骤:

  1)栈中开辟一块空间存放引用str3

  2)根据编译器合并已知量的优化功能,池中开辟一块空间,存放合并后的String常量"ab"

  3)引用str4指向池中常量"ab"

  4)str4所指即池中常量"ab",输出为true

  (5)

1 final String s = "a";
2 String str5 = s + "b";
3 System.out.println(str5 == "ab"); 

  同(4)

  (6)

1 String s1 = "a";
2 String s2 = "b";
3 String str6 = s1 + s2;
4 System.out.println(str6 == "ab"); 

  步骤:

  1)栈中开辟一块空间存放引用s1,s1指向池中String常量"a"

  2)栈中开辟一块空间存放引用s2,s2指向池中String常量"b"

  3)栈中开辟一块空间存放引用str5

  4)s1 + s2通过StringBuilder的最后一步toString()方法还原一个新的String对象"ab",因此堆中开辟一块空间存放此对象

  5)  引用str6指向堆中(s1 + s2)所还原的新String对象

  6)  str6指向的对象在堆中,而常量"ab"在池中,输出为false

  (7)

1 String str7 = "abc".substring(0, 2); 

  步骤:

  1)栈中开辟一块空间存放str7

  2)substring()方法还原一个新的String对象"ab"(不同于str6所指),堆中开辟一块空间存放此对象

  3)引用str7指向堆中的新String对象

    (8)

1  String str8 = "abc".toUpperCase(); 

  步骤:

  1)栈中开辟一块空间存放str8

  2)toUpperCase()方法还原一个新的String对象"ABC",池中并未开辟新的空间存放String常量"ABC"

  3)引用str8指向堆中的新String对象

  

  呼,这部分终于结束了,我们继续(? ??_??)? 

  3.几个常用方法:

 1 //1.charAt()方法:根据下标返回对应字符
 2 char c = str.charAt(2);
 3 System.out.println(c);
 4
 5 //2.substring()方法:截取字符串
 6 1<=string<4  (左边包含右边不包含)
 7 String s = "abcde";
 8 String s1= s.substring(1,4);
 9 System.out.println(s1);
10
11 //3.toUpperCase():变大写 toLowerCase():变小写
12 String s = "aBc";
13 System.out.println(s.toUpperCase());
14 System.out.println(s.toLowerCase());
15
16 //4.trim():去除字符串两边空格
17 String s1 = "   abcde             ";
18 String s2 = s1.trim();
19 System.out.println(s2.length);
20 System.out.println(s1.length);
21 System.out.println(s1.charAt(0));
22
23 //5.indexOf():搜索指定字符串,如果能找到返回起始下标,
24 //找不到返回-1 , 不可以隔着查  如搜索bd  会返回-1
25 String s = "abcde";
26 int a = s.indexOf("bc");
27 System.out.println(a);
28
29 //6.startsWith():判断是否以某字符串开头
30 //endsWith():判断是否以某字符串结尾
31 String s = "abcde";
32 boolean a = s.startsWith("ab");
33 boolean b = s.endsWith("de");
34 System.out.println(a);
35 System.out.println(b);
36
37 //7.字符串有两种创建方法
38 //字面值赋值:字符串使用频率 太高,java对String做了优化
39 //建议这样:
40 Sting s1 = "abc";
41 //不建议new关键字创建:
42 String s2 = new String("abc");
43
44 //8.判断字符串相等的方法
45 boolean boo = s1.equals(s2);
46 System.out.println(boo);
47
48 //9. = , == , equald的区别:
49 //   =  :赋值
50 //   == :比较对象是否相同
51 //   equals :比较两个对象内容是否相同 

  4.String ,StringBuffer 以及 StringBuilder区别:
   1)String长度不可以改变
   2)StringBuffer和StringBuilder长度可以改变
   3)StringBuffer线程安全,执行效率低
   4)StringBuilder线程不安全,执行效率高

  好了! 以上就是目前我在String方面概念模糊的地方了!希望能够帮到大家!
  我们下期再见!

原文地址:https://www.cnblogs.com/guojia314/p/9582014.html

时间: 2024-11-10 13:29:07

Java基础——String的相关文章

Java基础String的方法

Java基础String的方法 字符串类型写法格式如下: 格式一: String 变量名称; 变量名称=赋值(自定义或传入的变量值); 格式二: String 变量名称=赋值(自定义或传入的变量值);在输出时任何数据类型与字符串进行拼接,结果一般是字符串 1 public class StringFunc { 2 3 public static void main(String[] args){ 4 //字符串拼接 5 String str1; 6 str1 = "hello"; 7

不惑JAVA之JAVA基础 - String

本文适合有一定java基础的同学.本博客宗旨:突出重点,分析难点. String的本质 先看一下String源码 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash cod

黑马程序员-java基础-String类

1.概述 String 类适用于描述字符串事务.提供了多种对字符串进行操作的方法. > 字符串的最大的特点:一旦被初始化就不能被改变. 2.常见的操作方法: 2.1 获取: 1 public class StringText1 { 2 public static void main(String srgs[]) 3 { 4 // str 是一个类类型变量,"abc"是一个对象. 5 String str = "hello java!" ; 6 // str 和

黑马程序员----java基础--String字符串

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.String类概述 java中用String类进行描述对字符串进行了对象的封装.这样的好处是可以对字符串这种常见数据进行方便的操作.对象封装后,可以定义N多属性和行为. String类是final的,也就是说它没有子类. 二.String字符串的特点 1.字符串一旦被初始化就不可以被改变.并且存放在方法区中的常量池中. 1 class StringDemo{ 2 public static

java基础——String的常用方法

java中String的常用方法 1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); i nt len=s.length(); 2.charAt() 截取一个字符 例:char ch; ch="abc".charAt(1); 返回'b' 3. getChars() 截取多个字符 例:String s="this is a demo of the getChars method.

Java基础-String、StringBuffer、StringBuilder

看下面这段代码: public class Main { public static void main(String[] args) { String string = ""; for(int i=0;i<10000;i++){ string += "hello"; } } } 这句 string += "hello";的过程相当于将原有的string变量指向的对象内容取出与"hello"作字符串相加操作再存进另一个新

再探Java基础——String.format(String format, Object… args)的使用

最近看到类似这样的一些代码:String.format("参数%s不能为空", "birthday"); 以前还没用过这功能不知咐意思,后研究了一下,详细讲解如下. public static String format(String format, Object... args)的功能非常强大,用法非常灵活.主要的意思是返回指定的格式化的字符串.Format参数为格式字符串语法如下: %[argument_index$][flags][width][.precis

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

第一讲     String类 一.概述         String是字符串的类类型,用于描述字符串事物.字符串是一个特殊的对象.特殊之处就在于: Stings= new String();和String s1=””;两种写法都是在创建对象,使用起来一样. 二.特点 字符串最大的特点就是:一旦被初始化就不可以被改变. 例: String s1=“abc”: String s2 = new String(“abc”): String s3=“abc”: 比较的结果: s1==s2   ( fal

黑马程序员——Java基础---String类

--Java培训.Android培训.iOS培训.UI培训.PHP培训.期待与您交流! -- Scanner的概述和方法介绍 1.Scanner类的构造方法 Scanner(InputStream source) 2. 一般方法 hasNextXxx() 判断是否还有下一个输入项,其中Xxx可以是Int,Double等.如果需要判断是否包含下一个字符串,则可以省略Xxx package com.geekds.scanner; import java.util.Scanner; public cl