JAVA中toString方法的作用(转)

因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”。

 

它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法

 

总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法

 

回答补充:

 

写这个方法的用途就是为了方便操作,所以在文件操作里面可用可不用

 

例子1:

public class Orc{public static class A{public String toString(){return "this is A";}}public static void main(String[] args){A obj = new A();System.out.println(obj);}}

如果某个方法里面有如下句子: 

A obj=new A();

 

System.out.println(obj);

 

会得到输出:this is A

 

 

例子2:

public class Orc{public static class A{public String getString(){return "this is A";}}public static void main(String[] args){A obj = new A();System.out.println(obj);System.out.println(obj.getString());}}

会得到输出:xxxx@xxxxxxx的类名加地址形式

System.out.println(obj.getString());

 

会得到输出:this is A

 

 

看出区别了吗,toString的好处是在碰到“println”之类的输出方法时会自动调用,不用显式打出来。

 1 public class Zhang
 2 
 3 {
 4 
 5        public static void main(String[] args)
 6 
 7        {
 8 
 9               StringBuffer MyStrBuff1 = new StringBuffer();
10 
11               MyStrBuff1.append("Hello, Guys!");
12 
13               System.out.println(MyStrBuff1.toString());
14 
15               MyStrBuff1.insert(6, 30);
16 
17               System.out.println(MyStrBuff1.toString());
18 
19        }
20 
21 }

值得注意的是, 若希望将StringBuffer在屏幕上显示出来, 则必须首先调用toString方法把它变成字符串常量, 因为PrintStream的方法println()不接受StringBuffer类型的参数.

 

1 public class Zhang
2 {
3     public static void main(String[] args)
4     {
5         String MyStr = new StringBuffer();
6         MyStr = new StringBuffer().append(MyStr).append(" Guys!").toString();
7         System.out.println(MyStr);        
8     }
9 }
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

toString()方法在此的作用是将StringBuffer类型转换为String类型.

1 public class Zhang
2 {
3     public static void main(String[] args)
4     {
5         String MyStr = new StringBuffer().append("hello").toString();
6         MyStr = new StringBuffer().append(MyStr).append(" Guys!").toString();
7         System.out.println(MyStr);        
8     }
9 }

关于String ,StringBuffer的性能

 

博客分类: java语言

通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。

下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。

1.对象的生成和大小的调整。

JAVA程序设计中一个普遍的问题就是没有好好的利用JAVA语言本身提供的函数,从而常常会生成大量的对象(或实例)。由于系统不仅要花时间生成对象,以后可能还需花时间对这些对象进行垃圾回收和处理。因此,生成过多的对象将会给程序的性能带来很大的影响。

例1:关于String ,StringBuffer,+和append

JAVA语言提供了对于String类型变量的操作。但如果使用不当,会给程序的性能带来影响。如下面的语句:

String name=new String("HuangWeiFeng");

System.out.println(name+"is my name");

看似已经很精简了,其实并非如此。为了生成二进制的代码,要进行如下的步骤和操作:

(1) 生成新的字符串 new String(STR_1);

(2) 复制该字符串;

(3) 加载字符串常量"HuangWeiFeng"(STR_2);

(4) 调用字符串的构架器(Constructor);

(5) 保存该字符串到数组中(从位置0开始);

(6) 从java.io.PrintStream类中得到静态的out变量;

(7) 生成新的字符串缓冲变量new StringBuffer(STR_BUF_1);

(8) 复制该字符串缓冲变量;

(9) 调用字符串缓冲的构架器(Constructor);

(10) 保存该字符串缓冲到数组中(从位置1开始);

(11) 以STR_1为参数,调用字符串缓冲(StringBuffer)类中的append方法;

(12) 加载字符串常量"is my name"(STR_3);

(13) 以STR_3为参数,调用字符串缓冲(StringBuffer)类中的append方法;

(14) 对于STR_BUF_1执行toString命令;

(15) 调用out变量中的println方法,输出结果。

由此可以看出,这两行简单的代码,就生成了STR_1,STR_2,STR_3,STR_4和STR_BUF_1五个对象变量。这些生成的类的实例一般都存放在堆中。堆要对所有类的超类,类的实例进行初始化,同时还要调用类极其每个超类的构架器。而这些操作都是非常消耗系统资源的。因此,对对象的生成进行限制,是完全有必要的。

经修改,上面的代码可以用如下的代码来替换。

StringBuffer name=new StringBuffer("HuangWeiFeng");

System.out.println(name.append("is my name.").toString());

系统将进行如下的操作:

(1) 生成新的字符串缓冲变量new StringBuffer(STR_BUF_1);

(2) 复制该字符串缓冲变量;

(3) 加载字符串常量"HuangWeiFeng"(STR_1);

(4) 调用字符串缓冲的构架器(Constructor);

(5) 保存该字符串缓冲到数组中(从位置1开始);

(6) 从java.io.PrintStream类中得到静态的out变量;

(7) 加载STR_BUF_1;

(8) 加载字符串常量"is my name"(STR_2);

(9) 以STR_2为参数,调用字符串缓冲(StringBuffer)实例中的append方法;

(10) 对于STR_BUF_1执行toString命令(STR_3);

(11)调用out变量中的println方法,输出结果。

由此可以看出,经过改进后的代码只生成了四个对象变量:STR_1,STR_2,STR_3和STR_BUF_1.你可能觉得少生成一个对象不会对程序的性能有很大的提高。但下面的代码段2的执行速度将是代码段1的2倍。因为代码段1生成了八个对象,而代码段2只生成了四个对象。

代码段1:

String name= new StringBuffer("HuangWeiFeng");

name+="is my";

name+="name";

代码段2:

StringBuffer name=new StringBuffer("HuangWeiFeng");

name.append("is my");

name.append("name.").toString();

因此,充分的利用JAVA提供的库函数来优化程序,对提高JAVA程序的性能时非常重要的.其注意点主要有如下几方面;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态改变控件的方法

1.声明控件参数获取的对象 LinearLayout.LayoutParams linear (LayoutParams) view.getLayoutParams(); 2.设置控件参数,如宽度: linear.width 10; 3.使得设置生效 view.setLayoutParams(linear); 注意:view表示的是对应的控件对…

华为C语言笔试题集合

①华为笔试题搜集 1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量…

orcale中case when和group by同时使用会报无效标识符

不可以使用case when 的列名进行group by,如: select count(1)/7 as "平均违法数量", to_char(wfsj, yyyy-MM-dd ) as time, case when (to_char(wfsj, hh24)) between 00 and 04 then 00-04时 when (to_char(wfsj, hh24)) between 04 and 08 …

Windows平台WebRTC编译-VS2017

转载网站:https://blog.jianchihu.net/webrtc-build-vs2017.html 在音视频领域,想深入研究的话,必定会接触WebRTC。WebRTC是一个庞大的工程,就像是音视频领域的百科全书,音视频采集,编解码,传输…

Hadoop--初识Hadoop

什么是Hadoop? 搞什么东西之前,第一步是要知道What(是什么),然后是Why(为什么),最后才是How(怎么做)。但很多开发的朋友在做了多年项目以后,都习惯…

Android之TextView属性详解

android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)android:autoText如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。androi…

Python 列表解析

列表解析 列表解析总共有两种形式: 1. [i for i in range(k) if condition]:此时if起条件判断作用,满足条件的,将被返回成为最终生成的列表的一员。 2. [i if condition else exp for exp]:此时if...else被用来赋值&am…

VS2019编译 当前最新版chromium

VS2019编译 当前最新版chromium 之前编译过webrtc和chromium, 由于长时间没用,被我删除了, 最近在最新版本的google浏览器上遇到了播放器兼容性问题,老版本的google浏览器是没问题,IE, 火狐浏览器也没问题&#xff0…

37signals为何砍掉中层?个人点评,高素质人才队伍工作,靠的是全体发挥综合能力,而不是靠......

为什么80%的码农都做不了架构师?>>> 37signals为何砍掉中层? 分享到 本文来源于:中欧商业评论 作者:潘芸 发表于:2013-08-21 11:09:41 http://www.cyzone.cn/a/20130821/244571.html 37signals有多位程序员&#…

k-means k均值聚类的弱点/缺点

Similar to other algorithm, K-mean clustering has many weaknesses: 1 When the numbers of data are not so many, initial grouping will determine the cluster significantly. 当数据数量不是足够大时,初始化分组很大程度上决定了聚类,影响聚类…

Codeforces 360E 贪心 最短路

题意及思路&#xff1a;https://blog.csdn.net/huanghongxun/article/details/49846927 在假设所有边都是最大值的情况下&#xff0c;如果第一个人能比第二个人先到&#xff0c;那就缩短这条边。 代码&#xff1a; #include <bits/stdc.h> #define LL long long using na…

jni编译h文件

1.生成 class文件 到原文件目录&#xff08;*为java文件名称&#xff09; javac *.java 2.生成jni.h 到java目录&#xff08;*为java文件里面的类名称&#xff09; javah -jni com.example.widget.* 3.jse13 版本生成jni.h 到原文件目录&#xff08;*为java文件名称&#xff…

事件相关js函数

<script type"text/javascript">//功能:停止事件冒泡 function stopBubble(e) {//如果提供了事件对象&#xff0c;则这是一个非IE浏览器 if (e && e.stopPropagation)//因此它支持W3C的stopPropagation()方法 e.stop…

java嵌套循环

嵌套循环&#xff1a;循环里套循环 假设外循环的循环次数是m次,内循环的循环次数是n次&#xff0c;那么内层循环的循环次数需要 m * n次。 Eg&#xff1a;利用for循环语句的嵌套打印出乘法口诀表 class break1 { public static void main(String[] args) { for(int i1;i<10;…

计算收益复利的小例子

一个计算收益复利的小例子&#xff0c; 用c语言简单编程&#xff0c; 如 test 30 20 40&#xff1b; 30以万为单位&#xff0c;20是年收益百分比&#xff0c;40是年数。 #include <stdio.h> #include <stdlib.h>#define YEAR_GET_TYPE 0 // 年测试类型…

uva 10026 Shoemaker's Problem(排序)

题目连接&#xff1b;10026 Shoemakers Problem 题目大意&#xff1a;有一个鞋匠接了n双要修的鞋子&#xff0c; 修每双鞋需要d天&#xff0c;每推迟一天修将亏损val元&#xff0c;问按什么样的顺序修鞋可以保证损失最少&#xff0c;如果有多种情况输出字典序最小的。 解题思路…

ExtAspNet学习-利用AppBox框架快速创建项目(五)—完成项目含源代码

我们前边四个部分已经完成了框架需要的基础配置&#xff0c; 现在我们来完成项目 1、Subsonic 配置&#xff0c;首先在OraSurvey.DAO中添加App.config配置相关信息 View Code 1 <?xml version"1.0" encoding"utf-8" ?> 2 <configuration> 3…

坦克大战系列6-API常用函数说明2

前言 本篇主要介绍RobocodeAPI中的各种事件函数的说明&#xff0c;便于使用函数时有更清晰的思路。 子弹事件函数 onBulletHit() 当击中对方时 public void onBulletHit(BulletHitEvent event) 当你的子弹击中对方时就会调用这个方法。如果你想在子弹击中对方时作处理的话&…

linux+apache+mysql+php

linuxapachemysqlphp设置mysqll测试1网站注意&#xff1a;在安装或者测试的时候出现乱码的话&#xff0c;可以修改浏览器的编码一项将其改为适合的编码输入站点http://服务器地址/ecshop url会自动跳转到服务器地址/ecshop/install/index.php安装过程中会提示目录文件不可写&am…

模拟纳指stock的小例子

一个模拟纳指stock的小例子&#xff1a; #include <stdio.h> #include <stdlib.h>#define MAX_YEAR 100 #define ONE_YEAR_DAYS 240#define BEGIN_YUAN 10000 #define ONE_ADD_YUAN 4000 #define ONE_ADD_DAY 20 #define GOLD_FLOW…