Java 学习笔记 ------第四章 认识对象
本章学习目标:
- 区分基本类型与类类型
- 了解对象与参考的关系
- 从打包器认识对象
- 以对象观点看待数组
- 认识字符串的特性
一、“=” 和 “==”
当=用于基本类型时,是将值复制给变量,当==用于基本类型时,是比较两个变量储存的值是否相同,如下面的程序:
int a = 10;
int b = 10;
int c = a;
System.out.println(a == b); //显示true
System.out.println(a == c); //显示true
如果你在操作对象,=是用在指定参考名称参考某个对象,而==是用在比较两个参考名称是否参考同一对象。
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.1");
BigDecimal c = a;
System.out.println(a == b); //显示false
System.out.println(a == c); //显示true
System.out.println(a.equals(b)); //显示true
从内存的角度来说,值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
==比较的是两个对象的地址,而equals比较的是两个对象的内容。
二、基本类型打包器
Java中有两个类型系统,即基本类型与类类型,使用基本类型目的在于效率,然而更多时候,会使用类建立实例,因为对象本身可以携带更多信息,如果要让基本类型像对象一样操作,可以使用Long、Integer、Double、Float、Boolean、Byte等类来打包(Wrap)基本类型。
public class IntegerDemo {
public static void main(String[] args) {
int data1 = 10;
int data2 = 10;
Integer wrapper1 = new Integer(data1); //打包基本类型
Integer wrapper2 = new Integer(data2);
System.out.println(data1 / 3); //基本类型运算
System.out.println(wrapper1.doubleValue() / 3); //操作打包器方法
System.out.println(wrapper1.compareTo(wrapper2));
}
}
output:
3
3.3333333333333335
0
除了使用new创建基本类型打包器之外,从J2SE 5.0之后提供了自动装箱功能和自动拆箱功能。
//Autoboxing
int i = 10;
Integer wrapper = i;
Number number = 3.14f;
//Auto Unboxing
Integer wrapper = 10;
int foo = wrapper;
三、数组
数组在Java中就是对象。
数组的两种遍历方式:
1.使用for循环,通过使用length属性获取数组长度
int[] scores = { 88, 81, 74, 68, 78 };
for (int i = 0; i < scores.length; i++) {
System.out.printf("学生分数:%d %n",scores[i]);
}
2.使用增强式for循环
for(int score:scores){
System.out.printf("学生分数:%d %n",score);
}
数组的创建:
int[] intArray; //creating array without initializing or specifying size
int intArray1[]; //another int[] reference variable can hold reference of an integer array
int[] intArray2 = new int[10]; //creating array by specifying size
int[] intArray3 = new int[]{1,2,3,4}; //creating and initializing array in same line.
java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:
- 给数组赋值:通过fill方法。
- 对数组排序:通过sort方法,按升序。
- 比较数组:通过equals方法比较数组中元素值是否相等。
- 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
java.lang.System类提供了实用方法拷贝元素到另一个数组。在拷贝内容从一个数组到另一个数组的时候System.arrayCopy非常强大和灵活。你可以拷贝整个或子数组,具体看你的需求。
public static void main(String args[]) {
int[] source = new int[]{10, 20, 30, 40, 50};
int[] target = new int[5];
System.out.println("Before copying");
for(int i: target){
System.out.println(i);
}
System.arraycopy(source, 0, target, 0, 3);
System.out.println("after copying");
for(int i: target){
System.out.println(i);
}
}
Output:
Before copying
0
0
0
0
0
after copying
10
20
30
0
0
四、字符串
书上的内容已然非常详细,这里附上一篇importnew上的文章(浅谈Java字符串,http://www.importnew.com/16881.html)。
文章内详细讲解了String、StringBuffer和StringBuilder的性质和比较,以及方法和性能分析。
五、查阅API
从这一章开始,Java的学习逐渐走入了类和对象这个范畴,本章学习了大量的类以及部分方法,通过查阅相关API可以获取这些类的其他方法的使用方式,多查阅API非常有助于学习Java。http://www.yq1012.com/api/
Java 学习笔记 ------第四章 认识对象的更多相关文章
- [core java学习笔记][第四章对象与类]
4.3 用户自定义类 4.3.1 类数组的声明 需要两次new Employee[]=staff=new Employedd[3]; staff[0]=new Employedd(参数列表); sta ...
- 《Java程序设计》第四章-认识对象
20145221<Java程序设计>第四章-认识对象 总结 教材学习内容总结 类与对象 定义:对象是Java语言中重要的组成部分,之前学过的C语言是面向过程的,而Java主要是面向对象的. ...
- 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试
20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...
- [Python学习笔记][第四章Python字符串]
2016/1/28学习内容 第四章 Python字符串与正则表达式之字符串 编码规则 UTF-8 以1个字节表示英语字符(兼容ASCII),以3个字节表示中文及其他语言,UTF-8对全世界所有国家需要 ...
- Java 学习笔记 ------第三章 基础语法
本章学习目标: 认识类型与变量 学习运算符的基本使用 了解类型转换细节 运用基本流程语法 一.类型(基本类型) 所谓基本类型,就是在使用时,得考虑一下数据用多少内存长度存比较经济,利用程序语法告诉JV ...
- Java学习笔记(四)
字符串 字符串应用主要分为String类操作与字符串生成器 在程序中频繁的进行附加字符串则使用字符串生成器StringBuilder 数组 概述 数组是具有相同数据类型的一组数据的集合 数组创建 先声 ...
- o'Reill的SVG精髓(第二版)学习笔记——第四章
第四章:基本形状 4.1线段 SVG可以使用<line>元素画出一条直线段.使用时只需要指定线段起止点的x和y坐标即可.指定坐标时可以不带单位,此时会使用用户坐标,也可以带上单位,如em. ...
- Java 学习笔记 ------第五章 对象封装
本章学习目标: 了解封装的概念与实现 定义类.构造函数与方法 使用方法重载与不定长度自变量 了解static方法 一.Java封装概念 在面向对象程式设计方法中,封装(英语:Encapsulation ...
- Java学习笔记【四、类、对象、接口】
编程语言的发展 机器语言 过程语言 面向对象编程--封装.继承.多态 关键字 extends implements override overload super this static abstra ...
随机推荐
- C++程序设计入门 引用和动态内存管理学习
引用: 引用就是另一个变量的别名,通过引用所做的读写操作实际上是作用于原变量上. 由于引用是绑定在一个对象上的,所以定义引用的时候必须初始化. 函数参数:引用传递 1.引用可做函数参数,但调用时只需 ...
- 20181031noip模拟赛T2
思路: 这道题是个图论抽象的题目…… 考场上想到了没写对…… 我们发现,f函数转移的方式有两种,要么是代价10的+1,要么是代价1的乘一个质因数 那么我们就可以将这个抽象为一张图 每个i向每个i+1连 ...
- 偏前端 - 不是固定宽高,页面随设备同比 放大/缩小 展示。不妨看看rem单位,你就有眉目上手做了!!!
为什么要使用rem 之前有些适配做法,是通过js动态计算viewport的缩放值(initial-scale). 例如以屏幕320像素为基准,设置1,那屏幕375像素就是375/320=1.18以此类 ...
- nginx 开启phpinfo
在nginx配置文件中加 location / { //如果是资源文件,则不走phpinfo模式 if (!-e $request_filename){ ewrite ^/(.*)$ /index.p ...
- 大数据时代数据库-云HBase架构&生态&实践
业务的挑战 存储量量/并发计算增大 现如今大量的中小型公司并没有大规模的数据,如果一家公司的数据量超过100T,且能通过数据产生新的价值,基本可以说是大数据公司了 .起初,一个创业公司的基本思路就是首 ...
- Hive中导入Amazon S3中的分区表数据的操作
Hive中创建S3的外部表 数据在S3存放的数据是按时间纬度存放的,每天的数据存放在各自的目录下,目录结构如下截图: 每个目录下面的数据是CSV文件,现在将其导入到Hive中进行查询,通过创建对应的表 ...
- C# 对DataTable的简单操作
//更改列名 dt.Columns["原来的列名"].ColumnName="新的列名"; //移除列 dt.Columns.Remove("列名&q ...
- bmob关联表
var DDB_User = Bmob.Object.createWithoutData("DDB_User", "b2fd2fe68f"); // var T ...
- windows server dump文件
1. mini dump: ***** 需要包含 dbghelp.dll 库 ****mini_dump.h文件: // reference:https://msdn.microsoft.com/zh ...
- C# 访问修饰符和const、readonly
今天被人问起const和readonly,竟然有点咬不准,复习一遍. 访问修饰符 public 公有访问.不受任何限制. private 私有访问.只限于本类成员访问,子类,实例都不能访问. prot ...