前言

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[]输出不是内存地址的原因详解相关推荐

  1. java equals重写原则_java中为何重写equals时必须重写hashCode方法详解

    前言 大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白. 在上一篇博文Ja ...

  2. java弱引用在安卓中有效吗_Android 软引用和弱引用详解及实例代码

    Android 软引用 和 弱引用 1.  SoftReference:软引用-->当虚拟机内存不足时,将会回收它指向的对象:需要获取对象时,可以调用get方法. 2.  WeakReferen ...

  3. c语言字符串正序反序连接输出,C语言中字符串实现正序与逆序实例详解

    C语言中字符串实现逆序实例详解 字符串逆序和正序的实现代码: #include #include #include #include #include /*定义*/ typedef struct no ...

  4. java增强for循环_Java中增强for循环的实现原理和坑详解

    前言 引入增强for循环的原因:在JDK5以前的版本中,遍历数组或集合中的元素,需要先获得数组的长度或集合的迭代器,比较麻烦. JDK5中定义了一种新的语法----增强for循环,以简化此类操作.增强 ...

  5. java 取对象的类_Java中通过Class类获取Class对象的方法详解

    前言 本文主要给大家介绍的是关于Java通过Class类获取Class对象的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 阅读API的Class类得知,Class 没有公共 ...

  6. java显示参数,Java中的隐式参数和显示参数实例详解

    在学习java的过程中,我们会遇到许多的问题.下面我们就来看看什么是隐式参数和显示参数. 显式参数,就是平时见到的在方法名括号中间的参数,就是所谓能看得见的参数www.cppcns.com. 隐式参数 ...

  7. Java中创建String的两道面试题及详解

    转载自 Java中创建String的两道面试题及详解 我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd";String str2 ...

  8. java正则匹配多个斜杠_正则表达式中两个反斜杠的匹配规则详解

    关于正则表达式raw的\匹配规则 这是我在学习中获得到的一个例子,第一表达式中匹配到的是none.于是乎我就在思考,为什么会匹配不到,假设\t被转义成一个\t,那么也应该匹配到\tsanle,而不是n ...

  9. Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解。

    Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解. 什么是匿名内部类? 顾名思义 匿名 就是没有名字,一个没有名字的内部类,称为匿名内部类. 下面先看一个例子,比如说你 ...

  10. php java内存占用_PHP内存溢出优化代码详解

    相信很多人做大批量数据导出和数据导入的时候,经常会遇到PHP内存溢出的问题,在解决了问题之后,总结了一些经验,整理成文章记录下. 优化点 1.优化SQL语句,避免慢查询,合理的建立索引,查询指定的字段 ...

最新文章

  1. ElasticSearch 学习笔记 - 10.指标聚合
  2. Android中的JSONObject和JSONArray的使用
  3. linux ssl 证书服务器,Linux下Nginx安全证书ssl配置方法
  4. 计算机网络课程计划,计算机网络教学计划2017
  5. 深入理解 Android Activity的生命周期
  6. bzoj3533 [Sdoi2014]向量集 可持久化凸包+二分
  7. stl的multiset和set和priority_queue区别
  8. 2015年传智播客JavaEE 第168期就业班视频教程day38-SSH综合案例-1
  9. Spring 的定时任务--Quartz
  10. 【优化调度】基于matlab粒子群算法求解水电厂优化调度购电最小问题【含Matlab源码 1234期】
  11. SpringCloud微服务后台管理系统
  12. html站点文件命名规范,HTML制作中的文件夹及文件命名规范(二)
  13. 设计师的色彩理论,你知道不同色彩的秘密吗?
  14. 具有聚集诱导发射(AIE)特性的新型TADF分子SBF-BP-DMAC的定制合成
  15. matlab使用pcode加密
  16. Gephi实战教程:从入门到精通
  17. 我为什么鼓励你读计算机领域的博士?
  18. Java线程同步容易犯错的坑
  19. 怎么把安卓手机便签小工具添加到手机桌面显示呢?
  20. oracle中创建复合索引方法

热门文章

  1. 论文解读 | 基于递归联合注意力的句子匹配模型
  2. linux 正在运行的程序不能拷贝_如何实现在Windows上运行Linux程序,附示例代码
  3. poi向word插入图片_如何使用word裁剪图片图形?如何使用word修整图片?
  4. python for循环连续输入五个成绩判断等级_Python 入门(五)条件判断和循环
  5. 以太坊怎么注册_以太坊2.0将至,牛市即将到来??
  6. mysql limit耗时过长
  7. 【安全系列之跨域】跨域解决方案
  8. Elasticsearch系列「零」架构解析与最佳实践
  9. echarts——父元素宽度100%,但canvas宽度100px
  10. JavaScript——定时器(setTimeout/setInterval)