Java进阶第五章——常用类:基本数据类型与对应

1. String类

  • String表示字符串类型,属于引用数据类型,不属于基本数据类型。使用双引号括起来的都是String对象,例如:“abc”,"dev"这是2个String对象。
  • Java中规定双引号括起来的字符串是不可变的。这些用双引号括起来的字符串都是直接存储在”方法区“的”字符串常量池“当中。
public class StringTest{
    public static void main(String[] args){
        String s1 = new String("helle");
        String s2 = new String("helle");
        /**在这个例子中,一共创建了三个对象:
         *    1.方法区中字符串常量池有1个“hello”。
         *    2.堆内存当中有2个String对象。
         */
        
    }
}
  • String常用的构造方法

    ①String s = new String(“”);

    ②String s = “”; 最常用

    ③String s = new String(char数组)

    ​ String s = new String(char数组,起始下标,长度);

    ④String s = new String(byte数组)

    ​ String s = new String(byte数组,起始下标,长度);

public class StringTest {
    public static void main(String[] args) {
        //创建字符串对象最常用的一种方式
        String s1 = "hello world";

        //常用的构造方法
        //String(byte[])
        byte[] bytes = {97,98,99};  //在ASCII中,97对应a,98对应b,99对应c
        String s2 = new String(bytes);
        //输出一个引用时,会自动调用toString()方法,默认Object的话,会自动输出对象的内存地址。
        System.out.println(s2);  //abc

        //String(字节数组,数组元素下标起始位置offset,长度length)
        //将一部分转化为字符串
        String s3 = new String(bytes,1,2);
        System.out.println(s3);  //bc

        //将char数组全部转换成字符串
        char[] chars = {'咖','啡','加','点','i','c','e'};
        String s4 = new String(chars);
        System.out.println(s4);  //咖啡加点ice
        String s5 = new String(chars,0,2);
        System.out.println(s5);  //咖啡
    }
}

2. String类从常用方法

public class StringTest {
    public static void main(String[] args) {
        //1.char charAt(int index)
        //返回索引的char值
        char c = "冰咖啡".charAt(1);
        System.out.println(c);  //咖

        //2.int compareTo(String anotherString)
        //按照字典顺序比较字符串,拿两个字符串第一个不同的字符进行比较。
        int result = "abc".compareTo("abc");  //前后一致
        System.out.println(result);  //0
        int result2 = "abcc".compareTo("abce");  //前小后大
        System.out.println(result2);  //-2
        int result3 = "abce".compareTo("abcd");  //前大后小
        System.out.println(result3);  //1

        //3.boolean contains(CharSequence s)
        //判断前面的字符是否包含后面的字符串
        System.out.println("ice coffee".contains("coffee"));  //true
        System.out.println("ice coffee".contains("water"));   //false

        //4.boolean endsWith(String suffix)
        //判断前面字符是否以某个字符串结尾
        System.out.println("test.txt".endsWith(".java")); //false
        System.out.println("test.txt".endsWith(".txt"));  //true

        //5.boolean equals(Object anObject)
        //比较两个字符串必须实用equals方法,不能使用"=="
        System.out.println("abc".equals("abc"));  //true

        //6.boolean equalsIgnoreCase(String anotherString)
        //判断两个字符串是否相等,
        System.out.println("Abc".equalsIgnoreCase("abc")); //true

        //7.byte[] getBytes()
        //将字符串对象转换成字节数组
        byte[] bytes = "abcdef".getBytes();
        for (int i = 0; i < bytes.length; i++) {
            System.out.printf(bytes[i] + " "); //97 98 99 100 101 102
        }
        System.out.println();

        //8.int indexOf(String str)
        //判断某个子字符串在当前字符串中第一次出现的索引
        System.out.println("icecoffee".indexOf("coffee"));  //3

        //9.boolean isEmpty()
        //判断某个字符串是否为"空字符串"
        String s = "";
        System.out.println(s.isEmpty());  //true

        //10.int length
        //返回字符串长度
        //判断数组是length属性,判断字符串是length()方法
        System.out.println("abc".length());  //3

        //11.int lastIndexOd(String str)
        //判断某字符串在当前字符串中最后一次出现索引(下标)
        System.out.println("iceciesaicdakicesdamk".lastIndexOf("ice"));  //13

        //12.String replace(CharSequence target,CharSequence replacement)
        //String的父接口就是:CharSequence
        String newString = "icecoffee".replace("ice","warm");
        System.out.println(newString); //warmcoffee

        //13.String[] split(String regex)
        //拆分字符串
        String[] ymd ="2016:11:19".split(":");
        for (int i = 0; i < ymd.length; i++) {
            System.out.printf(ymd[i] + " ");  //2016 11 19
        }
        System.out.println();
        //14.boolean startsWith(String prefix)
        //判断某个字符串是否以某个字符串开始
        System.out.println("icecoffee".startsWith("ice")); //true
        System.out.println("icecoffee".startsWith("warm"));  //false

        //15.String substring(int beginIndex)
        //截取字符串
        System.out.println("icecoffee".substring(3));  //coffee

        //16.String substring(int beginIndex,int endIndex)
        //beginIndex  起始位置,有包括在内
        //endIndex    结束位置,没有包括在内
        System.out.println("icecoffeemade".substring(3,9)); //coffee

        //17.char[] toCharArray()
        //将字符串转换成char数组
        char[] chars = "icecoffee".toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.printf(chars[i] + " ");  //i c e c o f f e e
        }
        System.out.println();

        //18.String toLowerCase()
        //全部转为小写
        System.out.println("ICECOFFEE".toLowerCase());  //icecoffee

        //19.String toUpperCase()
        //全部转为大写
        System.out.println("icecoffee".toUpperCase());  //ICECOFFEE

        //20.String trim()
        //去除字符串前后空白
        System.out.println("    ice   coffee  ".trim());  //ice   coffee

        //21.String中只有一个静态方法,不需要new对象
        //valueOf()
        //将非字符串转换成字符串,如果传的是一个对象,会调用toString方法。
        String s1 = String.valueOf(true);  //可以把所有不是字符串的类型转换成字符串
        System.out.println(s1);  //true
        String s2 = String.valueOf(new Customer());
        System.out.println(s2);  //这是一杯冰美式

    }
}
class Customer{
    @Override
    public String toString() {
        return "这是一杯冰美式";
    }
}

3.StringBuffer()

  • Java中字符串是不可变的,每次拼接都会产生新的字符串,如果频繁拼接字符串,会占用大量的方法区内存造成内存空间的浪费。

  • 如果需要进行大量字符串拼接操作,使用JDK自带的:

    java.lang.StringBuffer

    java.lang.StringBuilder

  • StringBuffer:在方法中都有synchronized关键字修饰,表示StringBuffer在多线程环境下运行时安全的。是线程安全的。

public class StringBufferTest {
    public static void main(String[] args) {
        //StringBuffer创建一个初始化容量为16个byte[] 数组。
        StringBuffer stringBuffer = new StringBuffer();
        
        //append是追加的意思,方法底层在进行追加的时候会自动扩容
        stringBuffer.append("这是");
        stringBuffer.append(1);
        stringBuffer.append("杯冰美式");
        System.out.println(stringBuffer);   //这是1杯冰美式
    }
}
  • StringBuilder:在方法中都没有synchronized关键字修饰,表示StringBuffer在多线程环境下运行时是不安全的。是非线程安全的。

4.8种包装类

  • Java中为8中基本数据类型对应准备了8种包装类型。8种包装类属于引用数据类型,父类是Object。

  • 8中数据类型对应包装类名

基本数据类型 包装类型
byte java.lang.Byte
short java.lang.Short
int java.lang.Integer
long java.lang.Long
float java.lang.Float
double java.lang.Double
boolean java.lang.Boolean
char java.lang.Character
  • 装箱:基本数据类型→引用数据类型
  • 拆箱:引用数据类型→基本数据类型
public class IntegerTest {
    public static void main(String[] args) {
        //装箱:基本数据类型→引用数据类型
        Integer i = new Integer(123);

        //拆箱:引用数据类型→基本数据类型
        float f = i.floatValue();
        System.out.println(f);  //123.0
        int retValue = i.intValue();
        System.out.println(retValue); //123
    }
}
  • 八种包装类中有6个包装类的父类是Number,Number是一个抽象类,包括以下的拆箱方法:

    byte byteValue() 以byte形式返回指定数值

    double doubleValue() 以double形式返回指定数值

    float floatValue() 以float形式返回指定数值

    int intValue() 以int形式返回指定数值

    long longValue() 以long形式返回指定数值

    short shortValue() 以short形式返回指定数值

  • Integer类的构造方法有两个:Integer(int) Integer(String)。其他包装类也有相似构造方法

public class IntegerTest {
    public static void main(String[] args) {

        //将数字100转换成Integer
        Integer s = new Integer(100);
        
        //将String类型123转换成Integer
        Integer s2 = new Integer("123");
        System.out.println(s);  //100
        System.out.println(s2); //123
        
        //通过包装类常量,来获取最大值和最小值
        System.out.println(Integer.MAX_VALUE);  //2147483647
        System.out.println(Integer.MIN_VALUE);  //-2147483648

    }
}
  • JAVA5之后支持自动装箱,自动拆箱。
public class IntegerTest {
    public static void main(String[] args) {

        //自动装箱:基本数据类型--(自动转换)-->包装类型
        Integer s = 900;
        System.out.println(s);

        //自动拆箱:包装类型--(自动转换)-->基本数据类型
        int y = s;
        System.out.println(y);
        System.out.println(s + 100);

        //"=="不会出发自动拆箱机制
        Integer a = 1000;  //这里a是一个引用
        Integer b = 1000;  //这里b是一个引用
        System.out.println(a == b);  //两个引用保存的内存地址不同,false
        
        //java中为了提高执行效率,将[-128到127]之间的所有包装对象提前创建好,
        //放到方法区中的“整型常量池”中,所以用这个区间的数据不需要再new。
        Integer a1 = 127;  
        Integer b1 = 127;  
        System.out.println(a1 == b1);  //true

    }
}
  • Integer常用方法,其他包装类也有相似构造方法。
public class IntegerTest {
    public static void main(String[] args) {

        //手动拆箱
        Integer x = 100;
        int y = x.intValue();

         //java.lang.NumberFormatException:数字格式化异常
         //Integer a = new Integer("中文");

        //重点方法:static int parseInt(String s)
        //在网页文本框中输入的123实际上是一个"123"字符串
        //后台要求需要存入123数字,则使用到这个方法
        int retValue = Integer.parseInt("123");  //String → int
        //int retValue2 = Integer.parseInt("中文");  java.lang.NumberFormatException:数字格式化异常
        System.out.println(retValue + 100);
         
        //static String toBinaryString(int i)
        //将十进制转化为二进制字符串
        String binaryString = Integer.toBinaryString(3);  //11
        System.out.println(binaryString);

        //static String toHexString(int i)
        //将十进制转化为十六进制字符串
        String tohexString = Integer.toHexString(31);  //1f
        System.out.println(tohexString);

    }
}
  • String和int和Integer之间互相转换
public class IntegerTest01 {
    public static void main(String[] args) {
        //String --> int
        int i1 = Integer.parseInt("100");
        //int --> String
        String i2 = i1 + "";

        //int --> Integer
        //自动装箱
        Integer i3 = 100;
        
        //Integer --> int
        int y = i3;
        
        //String --> Integer
        Integer i4 = Integer.valueOf("123");
        
        //Integer --> String
        String i5 = String.valueOf(i4);
    }
}

——本章节为个人学习笔记。学习视频为动力节点Java零基础教程视频:动力节点—JAVA零基础教程视频

你可能感兴趣的:(咖啡ice的Java学习记录,java,开发语言)