String

1.Object类的equals方法和==的区别
        ==:如果连接的是基本数据类型,比较两个数据值是否相同!
         如果连接的两个引用类型,比较的两个引用类型的地址值是否相同!
         
        equals方法: Object类的中
                        public boolean equals(Object obj){
                                return this == obj ;
                        }
                默认情况下:比较的是两个对象的地址值是否相同
但是如果子类重写了Object类中的equals方法,(建议同时重写hashCode()),
比较的两个对象的内容(成员信息)是否相同                

2.Object类的toString()的含义
        toString():输出的就是 包名.类名@十六进制数据  :地址值 (没有意义)
        
        所有的子类(在标准类中),重写Object类toString()方法,否则直接输出对象名称,地址值 (没有意义)
                应该显示的是当前这个对象的成员信息表达式,结果应该易于读懂的信息表达式
                在一个类中重写toString()---->alt+ins--->
                        toString() 自动生成 类名{成员变量名1=值1,成员变量名2=值2}

3.匿名内部类的格式是什么,本质是什么?
    匿名内部类的格式
            new 类名 / 接口名(){
                    重写抽象类/接口中的抽象方法
            };
            
        本质:继承了该抽象类类或者是实现了该接口的子类对象    

4.方法的返回值和形式参数如果是接口类型,返回什么,传入实际参数是什么?

        返回值如果 接口类型,那么需要返回的是该接口的子实现类对象
                        1)要么去定义出接口的子实现类
                        2)要么使用接口的匿名内部类
                        
        形式参数:接口类型
                实际参数需要传递的该接口子实现类对象
                        1)要么去定义接口的子实现类
                        2)要么使用接口的匿名内部类

5.获取一个类的字节码文件的方式?三种
                    目前就是一种:
                            Object类的getClass方法()
                            
                            
                            
                            
                            给定数组
                            
                            将数组转换成字符串:

 Scanner类:java.util.Scanner ;
 * 需要导包--- 文本扫描器
 *
 * 构造方法:
 *      public Scanner(InputStream source):
 *                  创建一个文本扫描器,需要传递字节输入流,形式参数是一个抽象类,需要抽象类子类对象
 *
 * 获取功能
 *      public int nextInt() :将下一个录入的标记为int类型
 *
 *  判断功能:
 *        public boolean hasNextXXX()
 *          判断是否为xxx类型
 *                  public boolean hasNextLine():判断录入的是否为String
 *                  public boolean hasNextInt() :判断录入的是否为int

System.err.println("这是错误输出流");
如果录入的结果数据类型和接收的类型不匹配
         * java.util.InputMismatchException:输入类型不匹配异常
 String代表字符串:Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
 *          String str = "abc";
 *          字符串是常量;它们的值在创建之后不能更改(就是地址值)
 *
 * 构造方法:
 *
 *  public String()空参构造(不建议使用:是一个空字符序列)
 *  String(byte[] bytes) :使用平台默认解码集进行解码
 *  String(byte[] bytes,字符集) :使用指定字符集集进行解码
 *
 * public String(byte[] bytes,int offset,int length):将一个部分字节数组字符串
 * public String(char[] value):构造一个字符串对象,传递一个字符数组
 * public String(char[] value,int offset,int count):将字符数组的某个位置开始指长度的内容转换成字符串对象
 * public String(String original):传入指定的字符串值,构造一个字符串对象!
 *
 *
 *
 *
 * 字符串的获取功能:
 *      int length() :字符串的特有功能:获取字符串的长度
 *
 *      int[] arr = new int[4] ;
 *      length属性---数组中获取数组的长度的length属性!
 *
 *  字符串的有转换功能
 *      编码的过程:
 *      byte[] getBytes() :将字符串转换为字节数组,空参为平台默认编码集
 *      byte[] getBytes(字符集) :将字符串转换为字节数组,使用指定字符集编码
 *
 *
 * String s = "" ;
 * String s = null ; 空值,没有对象
public class StringDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //测试构造方法
//        public String()
        String s1 = new String() ;  //String s1 = "" ;
        //String s2 = null ;
        System.out.println(s1);
        System.out.println(s1.length());
        System.out.println("-----------------------------");


        //编码:将看懂的东西---->变成看不懂的
        /**
         * 常见的字符集:
         *  GBK :中国的中文编码表 (一个中文对应两个字节)
         *  GB2312:GBK的升级版,可以提供更多的中文字符
         *  utf-8:一个中文对应3个字节
         *  iso-8859-1:拉丁文码表
         *  big-5:大五码:港澳地区:繁写字体
         *  unicode:国际编码表
         *
         */
        String s2 = "我爱你中国" ;
        //String的转换功能:getBytes()---->byte[] :平台默认编码集编码: utf-8 (一个中文三个字节)
        byte[] bytes = s2.getBytes();
//        byte[] bytes = s2.getBytes("GBK"); //一个中文两个字节
        //System.out.println(bytes);
        //java.util.Arrays:针对数组操作的工具类(提供:排序,,搜索,将数组转换成的功能)
        //public static String toString(byte[] a):重载的方法:可以将任何数组转换成String
        String byteArray = Arrays.toString(bytes);
        System.out.println(byteArray);

        System.out.println("------------------------");
        //解码:利用String类型的构造方法String(byte[] bytes):默认平台解码集解码
        String s3 = new String(bytes) ;//utf-8解码
//        String s3 = new String(bytes,"GBK") ;
        System.out.println(s3);

        System.out.println("-----------------------------------");

        //创建一个字节数组:
        byte[] bytes2= {97,98,99,100,101} ;
        String s4 = new String(bytes2) ;   //字节数需要找对应的ASCII码表
        System.out.println(s4);
        System.out.println(s4.length());
        // public String(byte[] bytes,int offset,int length):将一个部分字节数组字符串
        String s5  = new String(bytes2,2,2) ;
        System.out.println(s5);
        System.out.println(s5.length());
        System.out.println("-----------------------------------");

        //public String(char[] value):构造一个字符串对象,传递一个字符数组
        char[] chs = {'高','圆','圆'} ;
        String s6 = new String(chs) ;
        System.out.println(s6);
        System.out.println(s6.length());
        //public String(char[] value,int offset,int count)
        String s7 = new String(chs,0,2) ;
        System.out.println(s7+"---"+s7.length());
        System.out.println("-----------------------------------");
//        public String(String original):
        String s8  = new String("hello") ;
        System.out.println(s8+"---"+s8.length());




    }
}

面试题
//String s = new String("hello") ;
//String s = "hello" ;    //推荐
//两个区别是什么?  分别创建了几个对象

/**
 * 前者:要在堆内存中产生空间地址,并且要常量标记:"hello" , 两个 (堆,常量池)
 * 后者:创建一个对象,将常量赋值给变量,直接现在常量池 中找是否存在这个常量值,存在,直接返回值地址;不存在
 * 在常量池中开辟空间!
 *
 * 前者和共同点:都是创建一个字符串对象:"hello",推荐使用后者,节省内存空间!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值