toString的使用与包装类的使用

当我们输出一个对象的引用时,实际上相当于调用toString()

以下为toString的原型

public String toString()
        {
            return getClass().getName()+"@"+Integer.toHexString(hashCode());
        }

例子:

public class Persontext
{
    public static void main(String[] args) {
        Person p1=new Person();
        p1.setAge(19);
        p1.setMale(true);
        p1.setName("Tom");
        System.out.println(p1.toString());
        System.out.println("--------------------------");
        System.out.println(p1);
    }
};

测试结果为

包装类的使用

每一个基本数据类型都对应一个包装类

基本数据类型byteshortintlongcharfloatdoubleboolean
包装类ByteShortIntegerLongCharFloatDoubleBoolean

1、Java提供八种包装类,是基本数据类型有类的特征

2、可以与基本数据类型进行相互转化

public class Persontext
{
    public static void main(String[] args) {
        int num1=10;
        Integer in1=new Integer(num1);
        Integer in2=new Integer("123");
        System.out.println(in1);
        System.out.println(in2);
    }
};

测试代码如上,测试结果为

由此可见,包装类可以实现从String类型到基本数据类型的转换

例子中,实现了整型转换成包装类,String型转为包装类

但是如果将“123”改成“123abc”就会报错,因为abc是字符类型,没有办法正确转化

上述方法是String类型和基本数据类型转化成包装类的过程

但是对于包装类如果还想要转化为基本数据类型的话,就需要利用包装类中的方法了

public class Persontext
{
    public static void main(String[] args) {
        /*
        包装类的方法
        xxxValue()可以将包装类转化为整型
         */
        int num1=10;
        Integer in1=new Integer(num1);
        Integer in2=new Integer("123");
        int i1=in1.intValue();
        System.out.println(i1);
    }
};

转化结果就是

同时还涉及自动拆箱和自动装箱

 ​​​​

 如图所示,图中Person类的方法setAge()的形参类型是int,是基本数据类型

public class Persontext
{
    public static void main(String[] args) {
        /*
        包装类的方法
        xxxValue()可以将包装类转化为整型
         */
        int num1=10;
        Integer in1=num1;
        /*
        此处直接给in1赋值的操作也不会报错,也是由于自动拆装箱
        同样,相反也能运行,如果是int num1=n1,也同样可以运行
         */
        Integer in2=new Integer("123");
        int i1=in1.intValue();
        Person p1=new Person();
        p1.setAge(i1);
        /*
        此处i1分明就是包装类,并不是形参中规定的基本数据类型int,但是此处并不报错
        这就是自动拆箱,在此处,自动把n1拆箱成为了基本数据类型
         */
        System.out.println(p1.getAge());
    }
};
//这就是自动拆装箱的应用

 包装类、整型与toString类型的转化

public class Persontext
{
    public static void main(String[] args) {
        
        int num1=10;
        Integer in1=new Integer(num1);
        String str1=num1+"";
        String str2=in1+"";
        System.out.println(str1);
        System.out.println(str2);

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

        float f1=12.3f;
        Float f2=12.3f;
        String str3=String.valueOf(f1);
        String str4=String.valueOf(f2);
        System.out.println(str3);
        System.out.println(str4);
        //此处是对于由包装类和基本数据类型对于String的转化
        //可知一共就两种方法,第一种就是“ 整型+“” ”的连结运算
        //第二种就是利用String重载的Valueof()方法
 
        System.out.println("-------------------");
        
        String n2="123";
        int in3=Integer.parseInt(n2);
        Integer in2=Integer.parseInt(n2);
        System.out.println(in3);
        System.out.println(in2);
        //这里是对于String类的数据转化为包装类和基本数据类型
        //主要是利用包装类中的parseXXX()
        //此处需要注意的是,这个地方可能会报NumberFormatException
        //但是Boolean就不会报这种错误,因为Boolean会默认False
    }
};

结果为

 还有一个需要注意的点

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

        int num1=10;
        Integer in1=new Integer(10);
        Integer in2=new Integer(10);
        Integer in3=19,in4=19;
        System.out.println(in1==in2);
        System.out.println(in3==in4);
    }
};

众所周知,“==”在引用数据类型中是用来比较地址值,但是结果却和预想的有差别

 

此处需要涉及关于数据存储的内容

 如图所示,二者的区别在于此

之所以会造成这样的区别,从根本上因为,只有new会在堆空间上创造一片空间,并将这个空间的地址值赋给栈中的空间,如果没有使用new的话,数据其实是方法区提供给栈的,方法区中的数据就是全局常量,且只存储与那一个地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值