学习java第二十五天,integer缓冲区、String类的常用方法学习

一、整数缓冲区integer

  • java预先创建了256个常用的整数包装类型对象
  • 在实际应用当中,对已创建的对象进行复用。

创建一个Demo02的类,用来测试整数缓冲区。

package com.ClassTest.Packaging;

public class Demo02 {
    public static void main(String[] args) {
        //面试题
        Integer integer1 = new Integer(100);
        Integer integer2 = new Integer(100);
        System.out.println(integer1==integer2);  //false 因为当前是属于引用类型,数据都是在堆里,比较的是栈里面的地址

        Integer integer3 =Integer.valueOf(100);  //自动装箱
        Integer integer4=Integer.valueOf(100);
        System.out.println(integer3==integer4);
        //true 因为自动装箱实际使用的是Integer.valueof的构造方法,
        // 而这个valueof方法中,有一个low跟higt的变量,这个变量的范围设定在-128到127期间,如果超出了,则返回false

        Integer integer5 = Integer.valueOf(200); //自动装箱
        Integer integer6 =Integer.valueOf(200);;
        System.out.println(integer5==integer6); //false
        //false 因为自动装箱实际使用的是Integer.valueof的构造方法,
        // 而这个valueof方法中,有一个low跟higt的变量,这个变量的范围设定在-128到127期间,如果超出了,则返回false

    }
}

综上,能看得出,第一个比较的时候,结果是false,因为当前比较的是引用类型,而引用类型在栈中都是存放在不同的地址,而比较的便是地址。第二个比较的时候,会进行自动转型,其实自动转型的时候使用的是Integer.valueOf这个方法,而这个方法中又存在了一个判断,这个方法里面的静态常量low跟high是固定的值,也就是在堆空间生成的数组,low是-128,而high是127,在这个范围内都是返回同一个地址,给引用变量,而超出后则返回false,所以第三个是false!

二、String类

  • 字符串是常量!创建之后不可改变!
  • 字符创字面值存储在字符串池中,可以共享!
  • String s = “Hello”; 产生一个对象,字符串池中存储
  • String s = new String(“Hello”);产生两个对象,堆、堆的方法池各存储一个

创建Demo01的类,用来测试String类

package com.ClassTest.StringClass;

public class Demo01 {
    public static void main(String[] args) {
        //String类的详解
        String name = "hello";  //"hello"存储在字符串池中
        name = "zhangsan";   //“zhangsan”赋值给name变量,给字符串赋值时,并没有修改数据,而是重新开辟了一个空间
          String name2 = "zhangsan";  //这里的zhangsan会赋值给name2,而栈空间会重新生成一个变量名。但字符串池不会重新开辟空间!


        //演示字符串的另一种创建方式、new String();
        String str = new String("java");  //会先在方法区里面创建一个对象,然后变量名会到栈中,而值会在堆中,堆再去指向堆中的方法区,再找到这个值
        String str2 = new String("java");
        System.out.println(str==str2);   //这里会得出false,因为==号在比较字符串的时候,比较的是地址,而str跟str2是两个不同的地址!
        System.out.println(str.equals(str2));  //这会得出true,因为equals比较的是字符串数据,所以相同!

    }
}

结果图
在这里插入图片描述

分析图
在这里插入图片描述

综上,先做一个简单的分析。
第一个分析,也就是当创建第一个name时,这个变量的值就会存放在堆中的字符串池里,而第二个name时,字符串池里的原有值并不会消失,也不会更改,而是开辟一个新的空间,用来存储这个值,而变量名还是同一个,在创建第三个name,也就是name2的时候,这个name2开始去堆的方法区里进行匹配有没有这个数值,如果有,则直接指向同一个数值,不会重新开辟新的空间!
第二个分析,当使用new String()的方式来创建时,str变量名会被存放在栈中,而对象会存在堆中,数值会被存放在堆的方法区中,当str去使用这个数值的时候,会先通过对象去访问,然后这个对象再去指向方法区中的字符串池,找到这个数值
第三个分析,也就是判断输出语句,为什么表示false。因为==号在输出时字符串时比较的是两个变量名的内存地址,而equals比较的是两个字符串的数据,所以相同!


三、String类常用方法

1、public int length() :返回字符串的长度。
2、public char charAt(int index):根据下标获取字符。
3、public boolean contains(String str):判断当前字符串中是否包含str,返回false或者true。
4、public char[] toCharArray():将字符串转换成数组。
5、public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1;
6、public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引。
7、public String trim():去掉字符串前后的空格。
8、public String toUpperCase():将小写转成大写。
9、public String toLowerCase():将大写转成小写。
10、public boolean endWith(String str):判断字符串是否以str结尾。
11、public boolean startwith (String str):判断字符串是否以str开头。
11、public String replace(char oldChar,char newCha):将旧字符串替换成新字符串。
12、public String[] split(String str):根据str做拆分。

测试类

package com.ClassTest.StringClass;

import java.util.Arrays;

public class Demo02 {
    //String 常用方法
    public static void main(String[] args) {
        //字符串方法的使用

        String content = "java是世界上最好的编程语言 java是真的好";

        //1、length(); 返回字符串的长度
        System.out.println("--------------1、length()返回字符串的长度-------------------");
        System.out.println("当前的字符串长度为"+content.length());

        //2、charAt(int index);返回某个位置的字符
        System.out.println("--------------2、charAt(int index);返回某个位置的字符-------------------");
        System.out.println("第五个字符时:"+content.charAt(4));  //下标从0开始计算  所以写4!

        //3、contains(String str);判断是否包含某个子字符串
        System.out.println("--------------3、contains(String str);判断是否包含某个子字符串-------------------");
        System.out.println("是否包含php:"+content.contains("php"));

        //4、toCharArray();返回字符串对应的数组
        System.out.println("--------------4、toCharArray();将字符串转换成数组-------------------");
        System.out.println("转换成数组后:"+ Arrays.toString(content.toCharArray()));  //这里需要将数组打印出来,否则会返回数组的地址

        //5、indexOf(String str);返回子字符串首次出现的位置
        System.out.println("--------------5、indexOf(String str);返回子字符串首次出现的位置-------------------");
        System.out.println("”是“字首次出现的下标为:"+content.indexOf("是"));

        //6、lastIndexOf(String str);返回子字符串最后出现的位置
        System.out.println("--------------6、lastIndexOf(String str);返回子字符串最后出现的位置-------------------");
        System.out.println("”是“字最后一次出现的下标为:"+content.lastIndexOf("是"));

        //7、trim();去掉字符串前后的空格
        System.out.println("--------------7、trim();去掉字符串前后的空格-------------------");
        String content2 = "  Hello World java!";
        System.out.println("去掉前后空格后:"+content2.trim());

        //8、toUpperCase();将小写转成大写
        System.out.println("--------------8、toUpperCase();将小写转成大写-------------------");
        System.out.println("将小写转成大写后:"+content2.toUpperCase());

        //9、toLowerCase():将大写转成小写
        System.out.println("--------------9、toLowerCase():将大写转成小写-------------------");
        System.out.println("将大写转成小写后:"+content2.toLowerCase());

        //10、endwith(str);判断字符串是否以str结尾
        System.out.println("--------------10、endwith();判断字符串是否以str结尾-------------------");
        System.out.println("当前语句是否以指定值(!)结尾:"+content2.endsWith("!"));

        //11、startwith(str);判断字符串是否以str开头
        System.out.println("--------------11、startwith();判断字符串是否以str开头-------------------");
        System.out.println("当前语句是否以指定值(d)开头:"+content2.startsWith("d"));

        //12、replace(char old,char new);用新的字符或字符串替换旧的字符或字符串
        System.out.println("--------------12、replace(char old,char new);用新的字符或字符串替换旧的字符或字符串-------------------");
        System.out.println("将java替换后为:"+content2.replace("java","php"));

        //13、split();对字符进行拆分
        System.out.println("--------------13、split();对字符进行拆分-------------------");

        String say = "length tochararray,indexof,lastindexof charat contains" +
                " trim toUpperCase toLowerCase endwith starwith replace split";
        String[] arr = say.split("[ ,]+");
        System.out.println("拆分后的长度为:"+arr.length);
        for (String string:arr
             ) {
            System.out.println(string);
        }

    }
}


综上。可以看到String类中常用方法的作用以及使用方法!特别需要注意的是将方法的使用情况记住,面试题可能会问到,object 类的也是!


练习String类中的方法

  • 需求:
  • 已知String str = “this is a text”;
  • 1、将str中的单词单独获取出来
  • 2、将str中的text替换成practice
  • 3、将text前面插入一个easy
  • 4、将每个单词的首字母改成大写
package com.ClassTest.StringClass;

import java.util.Locale;

public class Demo03 {
    //案例学习
    public static void main(String[] args) {

        String str = "this is a text";
        //需求:
        //1、将str中的单词单独获取出来
        System.out.println("--------------1、将str中的单词单独获取出来-----------------");
        String[] arr = str.split(" ");
        for (String sum:arr
             ) {
            System.out.println(sum);
        }

        //2、将str中的text替换成practice
        System.out.println("--------------2、将str中的text替换成practice-----------------");
        System.out.println(str.replace("text", "practice"));

        //3、将text前面插入一个easy
        System.out.println("--------------3、将text前面插入一个easy-----------------");
        System.out.println(str.replace("this is a text","this is a easy text"));

        //4、将每个单词的首字母改成大写
        System.out.println("--------------4、将每个单词的首字母改成大写-----------------");
        for (int i = 0; i < arr.length; i++) {
            char first = arr[i].charAt(0);
            //把第一个字符转成大写
           char upperfirst = Character.toUpperCase(first);
           //substring方法,是截取字符串,开始角标为1,到最后!
                        //这里是将提取后的数值加上i,点后的为截取开始到字符结束,This也就是h开始!然后合并
          String news = upperfirst+arr[i].substring(1);
          System.out.println(news);
        }

    }
}


综上,也是完成了四个小内容的测试,主要是substring方法,这个是之前没有说到的,他的作用主要是从某一个下标开始截取后面的数据!可以记一下这个方法


注:文章仅做个人学习日记,不做学习建议,学习来源:千峰教育

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值