java - 我想知道Java中的字符串类如何返回字符串
问题描述
Java语言中有一些与字符串相关的类,比如String和StringBuffer,可以只加载对象的名字
就像这样:
public static void main(String[] args) {
StringBuffer msg = new StringBuffer("Hello JAVA");
printMsg(msg);
}
public static void printMsg(StringBuffer msg) {
msg.append("I like JAVA");
System.out.println("printMsg: " + msg);
}
但是,其他类和自定义类对于对象的名称是不够的
所以当你加载一个值时,你必须写:
public class IntReference {
private int a;
public void setA(int a) {
this.a=a;
}
public int getA() {
return a;
}
public void add(int y) {
a+=y;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
IntReference intref = new IntReference();
int a=10;
intref.setA(a);
System.out.println(intref.getA());
plus(intref);
System.out.println(intref.getA());
}
public static void plus(IntReference intref) {
intref.add(10);
System.out.println(intref.getA());
}
那么 String 和 StringBuffer 类是如何单独通过名称获取其值的呢?
它使用什么机制?
解决方案
当您将对象传递给 的println
方法时System.out
,调用的是toString
在类中声明的方法Object
。这只是为了System.out.println
弄清楚要打印什么。
toString
定义该方法的方式Object
不是很有帮助 - 它打印出一堆通常与对象的内存位置相关的字符,而不是它的内容。
但是,包括 在内的某些类StringBuffer
有自己的版本,toString
该版本会覆盖Object
. 因此,如果您调用System.out.println
并传递它 a StringBuffer
,您实际上会看到缓冲区的内容,而不是调用类中的版本时获得的toString
字符Object
。
您的IntReference
类没有自己的toString
方法,因此当您将IntReference
对象传递给时System.out.println
,将调用该类中的toString
方法Object
。这不是很有用,这就是为什么你要做类似的事情System.out.println(intref.getA())
。
推荐阅读
- javascript - 在 Gulp AngularJS 应用程序中实现谷歌翻译
- java - log4j appender 仅将我的消息发送到 stdout,但不发送远程 GELF appender
- arrays - 搜索和过滤列表列表
- javascript - getUserMedia 图像捕获分辨率与 html 视频元素大小
- php - 将 jalali 日期转换为公历的问题
- java - Maven 清理命令:java.util.Collections.UnmodifiableRandomAccessList 到 java.util.ArrayList 类型的属性
- visual-studio-2017 - Visual Studio 2017 看不到映射的驱动器
- css - 扩展外部按钮单击时的搜索栏
- ios - MoPub 集合视图单元格设置背景颜色
- amazon-web-services - 重命名 ECS 服务