java 怎么输出地址,Java中char[]输出不是内存地址的原因详解
前言
Java中共有八种基本数据类型:byte,int,short,long,float,double,char,boolean。
计算机中的基础数据单位是bit, 1byte=8bit。
数据类型
存储大小
举例
注释
包装类
byte
1byte
3
字节
Byte
int
4byte
4
整数
Integer
short
2bytes
5
短整数
Short
long
8bytes
6
长整数
Long
float
4bytes
1.3
单精度浮点型
Float
double
8bytes
1.2
双精度浮点型
Double
char
2bytes
‘a'
字符
Char
boolean
1bit
true
布尔值
Boolean
这8种基本数据类型很简单,在示例中应用来看一下:
?
一段简单的输出代码,看看打印结果:
?
可以看到输出结果是没有问题的。
基本数据类型和对象引用
基本数据类型会一直在栈中创建,当声明基本类型时,不需要new。
?
栈的读取速度比堆快。基本类型一旦被声明,java将在栈上直接存储它,所以基本类型的变量表示的是数据本身。
假如调用基本类型的包装类来创建对象,那么将会在堆中创建。
?
等号右侧的new Double() 。这个new是在内存的堆中为对象开辟控件,保存对象的数据和方法。
等号左侧 Double a。a指代的是Double的一个对象,称为对象引用,这个对象引用是在栈中创建的。实际上a不是对象本身,它用来指向一个地址。
赋值=。这个就是把对象的地址赋给a。
此时输出a就是一个内存地址。有兴趣的同学自己试一试。
这个地方说明一个问题,假如你自定义的对象重写了.toString方法,此处就会显示你的自定义的重写方法的输出值。
在java的基本类型包装类中就重写了这个方法,所以调用print方法时会自动调用它的toString()方法。
?
在上边的例子中Employee的toString()方法没有被重写,Employer的toString()方法被重写了。
来看输出结果:
?
前者仍然是内存地址,后者是我们重写的方法。
print方法在调用事,假如类中的toString()方法没有被重写,则会电泳String.valueof()方法(后边有讲),假如重写了就会调用toString方法。
所有的包装类(Integer,Boolean等)都已经重写了toString方法,所以不会输出内存地址,而是输出正确的值。
下面的是Double类中的方法:
?
整形数据类型取值范围
byte占据8位,则其取值范围应该是2的8次方,也就是-128~127,超过这个区间就会报错,例如:
?
在编译器中会报错,提示不能将int转换为byte,因为128已经超出byte的范围了。
同样可以推得其他值的取值范围。
基本类型的数组输出值
?
看一下打印的结果:
?
可以看到,在结果中,所有的基本类型都可以打印出来,数组类型只能打印出char数组,其他的都是内存地址。
来看一下源码,在print函数中
?
这个char被转换为了String类型,然后进行wirte方法:
?
这里会立即发送缓冲流输出。
对于所有的基础类型都会打印出具体的值,这个没有问题,但是对于数组为什么只有char的数组类型打印出了正确的结果而没有输出内存地址?
带着这个问题我们来了解一下:
对于int型数组,java调用的是下面的方法:
?
此处数组被认为是Object类型,调用的是
?
此处的三目表达式用来判空,然后看一下obj.toString()方法:
?
相信看到此处应该可以看出来为什么输出会是[I@1b6d3586了,I代表的类的名称。
那么对于char数组类型的调用呢,次数室友玄机的:
?
此处调用的是println(char x[])这个函数,那么这个char x[]是个什么鬼呢?
其实就是java中的数组初始化,相当于char[] x。
然后看看print(x)函数:
?
最后是write()函数:
?
到了这大家知道为什么会有区别了么,因为其他类型的数组都被认为是Object类型了,所以会输出内存地址。而char[]调用的方法是输出char这个数组中的每一个值,所以不是内存地址了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
java 怎么输出地址,Java中char[]输出不是内存地址的原因详解相关推荐
- java equals重写原则_java中为何重写equals时必须重写hashCode方法详解
前言 大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白. 在上一篇博文Ja ...
- java弱引用在安卓中有效吗_Android 软引用和弱引用详解及实例代码
Android 软引用 和 弱引用 1. SoftReference:软引用-->当虚拟机内存不足时,将会回收它指向的对象:需要获取对象时,可以调用get方法. 2. WeakReferen ...
- c语言字符串正序反序连接输出,C语言中字符串实现正序与逆序实例详解
C语言中字符串实现逆序实例详解 字符串逆序和正序的实现代码: #include #include #include #include #include /*定义*/ typedef struct no ...
- java增强for循环_Java中增强for循环的实现原理和坑详解
前言 引入增强for循环的原因:在JDK5以前的版本中,遍历数组或集合中的元素,需要先获得数组的长度或集合的迭代器,比较麻烦. JDK5中定义了一种新的语法----增强for循环,以简化此类操作.增强 ...
- java 取对象的类_Java中通过Class类获取Class对象的方法详解
前言 本文主要给大家介绍的是关于Java通过Class类获取Class对象的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 阅读API的Class类得知,Class 没有公共 ...
- java显示参数,Java中的隐式参数和显示参数实例详解
在学习java的过程中,我们会遇到许多的问题.下面我们就来看看什么是隐式参数和显示参数. 显式参数,就是平时见到的在方法名括号中间的参数,就是所谓能看得见的参数www.cppcns.com. 隐式参数 ...
- Java中创建String的两道面试题及详解
转载自 Java中创建String的两道面试题及详解 我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd";String str2 ...
- java正则匹配多个斜杠_正则表达式中两个反斜杠的匹配规则详解
关于正则表达式raw的\匹配规则 这是我在学习中获得到的一个例子,第一表达式中匹配到的是none.于是乎我就在思考,为什么会匹配不到,假设\t被转义成一个\t,那么也应该匹配到\tsanle,而不是n ...
- Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解。
Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解. 什么是匿名内部类? 顾名思义 匿名 就是没有名字,一个没有名字的内部类,称为匿名内部类. 下面先看一个例子,比如说你 ...
- php java内存占用_PHP内存溢出优化代码详解
相信很多人做大批量数据导出和数据导入的时候,经常会遇到PHP内存溢出的问题,在解决了问题之后,总结了一些经验,整理成文章记录下. 优化点 1.优化SQL语句,避免慢查询,合理的建立索引,查询指定的字段 ...
最新文章
- ElasticSearch 学习笔记 - 10.指标聚合
- Android中的JSONObject和JSONArray的使用
- linux ssl 证书服务器,Linux下Nginx安全证书ssl配置方法
- 计算机网络课程计划,计算机网络教学计划2017
- 深入理解 Android Activity的生命周期
- bzoj3533 [Sdoi2014]向量集 可持久化凸包+二分
- stl的multiset和set和priority_queue区别
- 2015年传智播客JavaEE 第168期就业班视频教程day38-SSH综合案例-1
- Spring 的定时任务--Quartz
- 【优化调度】基于matlab粒子群算法求解水电厂优化调度购电最小问题【含Matlab源码 1234期】
- SpringCloud微服务后台管理系统
- html站点文件命名规范,HTML制作中的文件夹及文件命名规范(二)
- 设计师的色彩理论,你知道不同色彩的秘密吗?
- 具有聚集诱导发射(AIE)特性的新型TADF分子SBF-BP-DMAC的定制合成
- matlab使用pcode加密
- Gephi实战教程:从入门到精通
- 我为什么鼓励你读计算机领域的博士?
- Java线程同步容易犯错的坑
- 怎么把安卓手机便签小工具添加到手机桌面显示呢?
- oracle中创建复合索引方法
热门文章
- 论文解读 | 基于递归联合注意力的句子匹配模型
- linux 正在运行的程序不能拷贝_如何实现在Windows上运行Linux程序,附示例代码
- poi向word插入图片_如何使用word裁剪图片图形?如何使用word修整图片?
- python for循环连续输入五个成绩判断等级_Python 入门(五)条件判断和循环
- 以太坊怎么注册_以太坊2.0将至,牛市即将到来??
- mysql limit耗时过长
- 【安全系列之跨域】跨域解决方案
- Elasticsearch系列「零」架构解析与最佳实践
- echarts——父元素宽度100%,但canvas宽度100px
- JavaScript——定时器(setTimeout/setInterval)