Java 入门探索者10(StringBuffer类,包,toString方法,字符串方法,包装类)

StringBuffer是Java中的一个类,用于处理字符串的可变对象。它是一个线程安全的、可变的字符串序列。StringBuffer类的声明如下:

```
public final class StringBuffer extends AbstractStringBuilder implements Serializable, CharSequence
```

StringBuffer类拥有一系列的方法,可以对字符串进行添加、删除、修改等操作。下面是一些常用的方法:

1. append():向字符串末尾追加内容。
2. insert():在指定位置插入内容。
3. delete():删除指定位置的内容。
4. replace():替换指定位置的内容。
5. reverse():反转字符串。
6. capacity():返回当前容量。
7. length():返回字符串的长度。

StringBuffer类的主要特点是线程安全,即多个线程同时操作一个StringBuffer对象时,不会出现数据混乱的问题。这是通过在方法中添加synchronized关键字来实现的。

与String类不同,StringBuffer对象的内容是可以修改的。这在需要频繁修改字符串内容时非常有用,可以避免每次修改都需要创建一个新的String对象的开销。

需要注意的是,StringBuffer是一个过时的类,从Java 5开始,推荐使用StringBuilder类替代StringBuffer类。StringBuilder类与StringBuffer类的功能相似,但不是线程安全的。如果在单线程环境下使用,建议使用StringBuilder类,以提高性能。

public class StringBufferTest {
    public static void main(String[] args) {
        //StringBuffer叫做字符串缓冲区,也叫字符串生成器
        //底层是一个字符数组
        StringBuffer sb1 = new StringBuffer();//默认长度为16
        StringBuffer sb2 = new StringBuffer(20);//可以自我指定长度
        StringBuffer sb3 = new StringBuffer("hello");//字符串长度+16
        //StringBuffer和string一样都重写了toString方法
        System.out.println(sb3);
        //StringBuffer进行字符串拼接的时候不能使用+进行字符串拼接
        //sb3 = sb3+"world"
        //StringBuffer使用append方法进行追加字符串
        sb3.append("world");
        System.out.println(sb3.toString());
        System.out.println("hello".toString());
    }
}
在Java中,包(package)是一种用于组织类(class)和接口(interface)的机制。它可以将相关的类和接口分组存放,使代码更加有层次性和可维护性。下面是Java中常用的几种包:

1. java.lang包:这个包是Java语言的核心包,其中包含着一些Java语言的基本类,如String、Integer等。这些类不需要显式导入即可使用。

2. java.util包:这个包提供了一些常用的工具类,如集合类(ArrayList、HashSet等)、日期类(Date、Calendar等)、随机数生成器等。

3. java.io包:这个包提供了输入和输出相关的类,用于读写文件和网络通信。其中有一些常用的类,如File、BufferedReader、PrintWriter等。

4. java.net包:这个包提供了用于处理网络编程的类和接口。它可以实现网络通信、创建服务器和客户端等功能。常用的类有Socket、ServerSocket等。

5. java.awt包:这个包提供了Java的图形界面工具包,用于开发窗口应用程序。其中包含了创建窗口、绘制图形、处理事件等功能。常用的类有Frame、Button、TextField等。

6. java.swing包:这个包是在AWT的基础上开发的一套图形界面工具包,与AWT相比,它更加强大和灵活,并且提供了更多的组件和效果。常用的类有JFrame、JButton、JTextField等。

这只是Java中的一小部分包,Java还有很多其他的包,如数据库访问包(java.sql)、多线程包(java.util.concurrent)等。这些包都提供了丰富的功能和类库,方便开发人员开发各种类型的应用程序。


public class StringTest01 {
    public static void main(String[] args) {
        //String是字符串类,也是引用类型
        //String位于java.lang包这个包下的类使用的时候都不需要导包
        //创建字符串对象的方式有两种
        //1.引用字符串常量给字符串变量赋值
        String s1 = "Hello";
        //2.通过构造方法创建对象
        String s2 = new String();
        char[] c= {'h','e','l','l','o'};
        //将字符数组中的数据拼接在一起作为字符串进行创建对象
        String s3 = new String(c);
        //字符数组索引为2开始,长度为2的字符拼接在一起为字符串创建对象
        String s4 = new String(c,2,2);
        String s5 = new String("Hello");
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);
        System.out.println(s5);

    }
}
toString方法是Java中所有类都继承自Object类的一个方法。它用于将对象转换为字符串表示形式。

默认情况下,Object类的toString方法返回一个由类的名称和对象的哈希码组成的字符串。例如,对于一个名为myObject的对象,其默认的toString方法返回的字符串可能是"com.example.MyObject@123456"。

然而,大多数情况下,我们需要根据对象的具体属性来自定义toString方法。这可以通过在类中重写toString方法来实现。

例如,假设我们有一个名为Person的类,定义如下:

```java
public class Person {
    private String name;
    private int age;
    
    // 构造方法、Getter和Setter方法等省略
    
    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}
```

在上面的例子中,我们重写了Person类的toString方法,使其返回一个以"name"和"age"属性为基础的字符串表示形式。当我们调用一个Person对象的toString方法时,它将返回类似于"Person{name='Alice', age=25}"的字符串。

通过重写toString方法,我们可以方便地将对象转换为String类型,以便在打印日志或调试时更方便地查看对象的属性。

import lesson07.Student;
/**
 * 面试题:为什么普通引用数据类型打印的是地址,而字符串对象打印是内容呢
 * 因为普通引用数据类型的对象默认调用的是Object的toString方法,所以默认打印出来的就是
 * 完整类路径+类名+@+十六进制的地址值,而String类型有自己的toStrig方法,会将字符串
 * 转换成字符串数组,然后将字符数组打印在控制台上,所以输出是的字符串内容
 */
public class StringTest02 {
    public static void main(String[] args) {
        String s1 = new String("Hello");
        Student s2 = new Student();
        //String有自己的toString方法,所以打印的不是地址
        System.out.println(s1);
        System.out.println(s2);
    }
}
**
 * 面试题:问一共创建了多个String对象
 * 答:字符串为了减少内存将字符串常量保存在字符串常量池中,而字符串常量池1.6之前位于
 * 方法区中,但是到了1.8之后位于堆区中,如果常量池中有字符串常量,则使用的时候,直接
 * 引用,而如果字符串常量不存在,则会创建新的字符串常量,但是不管常量池如何变化
 * 只要有new调用构造方法,就会在堆区中创建一个字符串。所以考虑多少个字符串要同时
 * 考虑常量池和构造方法创建的堆区对象
 */
public class StringTest03 {
    public static void main(String[] args) {
        String s1 = "Hello";//1
        String s2 = new String();//1
        String s3 = new String("hello world");//2
        String s4 = new String("hel1o");//2
        String s5 = "hello world";//0
        //
    }
}
在Java中,字符串是一种不可变的对象,它提供了许多方法来操作和处理字符串。下面是一些常用的字符串方法:

1. `length()`:返回字符串的长度。

```java
String str = "Hello World";
int length = str.length(); // 返回 11
```

2. `charAt(index)`:返回指定索引位置的字符。

```java
String str = "Hello";
char ch = str.charAt(0); // 返回 'H'
```

3. `substring(startIndex, endIndex)`:返回子字符串,从startIndex(包含)到endIndex(不包含)。

```java
String str = "Hello World";
String subStr = str.substring(6, 11); // 返回 "World"
```

4. `indexOf(str)`:返回str在字符串中第一次出现的索引位置。

```java
String str = "Hello World";
int index = str.indexOf("o"); // 返回 4
```

5. `lastIndexOf(str)`:返回str在字符串中最后一次出现的索引位置。

```java
String str = "Hello World";
int index = str.lastIndexOf("o"); // 返回 7
```

6. `toUpperCase()`:将字符串中的所有字符转换为大写。

```java
String str = "Hello World";
String upperCaseStr = str.toUpperCase(); // 返回 "HELLO WORLD"
```

7. `toLowerCase()`:将字符串中的所有字符转换为小写。

```java
String str = "Hello World";
String lowerCaseStr = str.toLowerCase(); // 返回 "hello world"
```

8. `trim()`:去掉字符串前后的空白字符。

```java
String str = "   Hello World   ";
String trimmedStr = str.trim(); // 返回 "Hello World"
```

这些只是字符串的一部分常用方法。Java中还有许多其他方法,例如替换、拆分、连接等,可以根据具体的需求来选择使用。
public class StringTest04 {
    public static void main(String[] args) {
        String s = " Hello world everyone ";
        System.out.println("字符串的长度为:"+s.length());
        //字符串的索引也是从0开始的
        //indexOf正向查找,从左到右查
        System.out.println("查找字符串的所在位置"+s.indexOf("ll"));
        //lastIndexOf反向查找,从右到左查,索引还是从左侧开始
        System.out.println("查找字符串的所在位置"+s.lastIndexOf("ll"));
        //获取指定索引位置的字符,返回值是char类型
        System.out.println(s.charAt(2));
        //开始位置的索引表示的值要截取,结束位置表示的值不截取
        System.out.println("截取子字符串"+s.substring(6,8));
        System.out.println("去除字符串前后空格"+s.trim());
        //替换:第一个参数是旧字符串中要被替换的字符串,第二个参数是替换的新字符串
        System.out.println("替换"+s.replace(" ",""));
    }
}
/**
 * 面试题:String的equals方法的实现原理
 * 答:String会将字符串转换为字符数组,然后在进行按位逐一比较,但是为了提高比较效率
 * 会先进行三重判断,第一重判断比较两个对象的地址是否相同,如果相同则返回true,表示
 *两个对象是同一个对象,如果不相同则进行第二重判断,判断当前传递过来的对象是否是
 * String类型创建的对象,如果不是则返回false, 如果是则进行第三重判断,比较两个字符串
 *的长度是否相同,如果不相同,则返回false,如果相同在进行字符数组的逐一比较,当全部
 * 相同才会返回为true, 所以String的equals方法比较的是两个对象的内容是否相同而不是地址
 */
public class StringTest05 {
    public static void main(String[] args) {
        Student s1 = new Student();
        Student s2 = new Student();
        System.out.println(s1.equals(s2));
        System.out.println(s1==s2);

        String s3 = "hello";
        String s4 = new String("hello");
        System.out.println(s3.equals(s4));
        System.out.println(s3==s4);
    }
}
Java包装类是用于将基本数据类型包装成对象的类。Java中的8个基本数据类型(byte、short、int、long、float、double、boolean、char)都有对应的包装类。

Java的包装类分为两类:
1. 基本数据类型的包装类(Byte、Short、Integer、Long、Float、Double、Boolean、Character):这些类将基本数据类型封装成了对象,使得可以在对象上进行各种操作。例如,可以通过调用包装类的方法来获取最大值、最小值或对基本数据类型进行转换。
2. 数值类型的包装类(Byte、Short、Integer、Long、Float、Double):这些类继承自Number类,提供了各种与数值相关的方法,如计算平方根、绝对值、取整等。

包装类与基本数据类型之间可以进行自动拆箱和装箱操作,即可以在基本数据类型和包装类之间自动进行转换。这种自动转换可以简化代码的编写,使得基本数据类型可以像对象一样进行操作。

另外,包装类还提供了valueOf()方法来将字符串转换为对应的包装类对象,以及提供了parseXxx()方法来将字符串转换为对应的基本数据类型。

总的来说,Java的包装类提供了一系列的方法和功能,使得基本数据类型可以像对象一样进行操作,并且可以方便地在基本数据类型和包装类之间进行转换。

/**
 * 包装类作用就是:
 * 1.解决基本数据类型跟包装类类型进行互转
 * 2.当不能使用基本数据类型的时候,可以使用包装类类型例如集合
 *
 * 面试题:请写出10个你知道的位于java.long包下的类
 * 八种基本数据类型的包装类,String,StringBuffer,Object,System等
 */
public class Wrapper {
    public static void main(String[] args) {
        //用基本数据类型给包装类类型赋值就是装箱,而且是自动装箱
        Integer i1=20;
        //因为包装类是对象类型,所以也可以用new创建对象
        Integer i2=new Integer(50);
        //用包装类型给基本数据类型赋值就是拆箱,而且是自动拆箱
        int a=i2;
        System.out.println(i1);
        System.out.println(i2);
        //将包装类转换成字符串
        String s=i1.toString();
        System.out.println(s);
        s="123";
        //将字符串转换成基本数据类型,使用parse***方法,调用这个方法的是你要转为什么
        //基本类型的包装类去调用
        int b=Integer.parseInt(s);
        System.out.println(b);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值