String内存分析,for-each,参数传递
上午总结:
蓝白书P245
(一)Iterator用法
import java.util.*;
public class HashSetTest{
public static void main(String[] args){
Set<String> set=new HashSet<String>();
set.add(“hyy”);
set.add(“qxy”);
set.add(“qjy”);
set.add(“qxy”);
System.out.println(“set.size()=”+set.size());
for(Iterator<String> it=set.iterator();it.hasNext();){
String str=it.next();
System.out.println(str);
}
}
}
/*说明:Iterator<String> it=set.iterator()表示返回集合上的迭代器,用来访问该集合中的各个元素。
it.hasNext();表示是否有元素可以迭代。 String str=it.next();表示返回到迭代的下一个元素。
可以把for(int i=0;i<10;++i)对着看,概念和形式上差不多。
*/
(二)有关字符串“==”和equals的用法和区别
==表示字符串变量是否引用自同一个字符串对象。
更常用的是用String类中覆盖Object类的equals方法来比较两个字符串变量所引用的字符串对象内容是否相同。
/*字符串比较*/
public class StringCompareTest{
public static void main(String[] args) {
String s1="abc中文";
String s2="abc中文";
String s3=new String("abc中文");
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
System.out.println("----------");
System.out.println(s1==s3);//false
System.out.println(s1.equals(s3));//true
}
}
/*
运行结果:
true
true
----------
false
true
*/
/*
理由:String类所修饰的变量表示不可修改的,并且存在一个常量池,且如果前面有一个相同的值的话,当再存入一个相同的值的话,则这两个值指向同一个地址,而==表示地址相同即相同,除非用new关键字另外开辟一个内存空间,比如S3。 而equals只要求两个对象的内容相等即可。
*/
(三).String内存分析
String str=new String(“corejava”);
/*在java常量池中找到或创建一个内容为“corejava”的字符串对象,然后在堆上再创建一个对象,且字符串常量池中的内容复制到堆中对象。*/
String str=“corejava”;
String类所修饰的变量表示不可修改的,并且存在一个常量池,且如果前面有一个相同的值的话,当再存入一个相同的值的话,则这两个值指向同一个地址,即如果在常量池中存在相同的内容,则不会再创建新的相同的内容,且地址不变。
/*
(四)关于HashSet实现类 参看蓝白书P247
代码解析:
if((this.name==null)?(other.name!=null):!this.name.equals(other.name)){
return false;
}
<==>
if(this.name==null && other.name!=null)
return false;
if(this.name!=null && !this.name.equals(other.name))
return false;
下午总结:
蓝白书
P52 for-each用法
(一)for-each循环
增强型的for循环也叫for-each循环,用这个语法可以遍历数组或集合。
语法格式:
for(数据类型 变量名:数组或集合变量名){
//通过“变量名”就可以访问数组或集合中的每个元素的值
}
比如:
int array={1,2,3,4,5};
for(int element :array){
System.out.println(element);
}
//说明:访问数组array中的每个元素element,但无法更新数组元素
红黄书
P8参数传递
class A1{
int a;
int b;
} public class TestParam{
public void exchange(int x,int y){
System.out.println("交换前:x="+x+",y="+y);
int temp=x;
x=y;
y=temp;
System.out.println("交换后:x="+x+",y="+y);
}
public void exchange(A1 a){
System.out.println("交换前:a.a="+a.a+",a.b="+a.b);
int temp=a.a;
a.a=a.b;
a.b=temp;
System.out.println("交换后:a.a="+a.a+",a.b="+a.b);
} public static void main(String[] args) {
A1 a=new A1();
a.a=1;
a.b=2;
TestParam tp=new TestParam();
int x=5;
int y=10;
System.out.println("在main()方法中,交换前:x="+x+",y="+y);
tp.exchange(x,y);
System.out.println("在main()方法中,交换后:x="+x+",y="+y); System.out.println("\n\n在main()方法中,交换前:a.a="+a.a+",a.b="+a.b);
tp.exchange(a);
System.out.println("在main()方法中,交换后:a.a="+a.a+",a.b="+a.b);
}
}
/*
运行前:
在main()方法中,交换前:x=5,y=10
交换前:x=5,y10
交换后:x=10,y=5
在main()方法中,交换后:x=5,y=10 在main()方法中,交换前:a.a=1,a.b=2
交换前:a.a=1,a.b=2
交换后a.a=2,a.b=1
在main()方法中,交换后:a.a=2,a.b=1
*/
说明:exchange(int x, int y)带整型参数,是值传递,在main方法里面前后不变。
exchange(A a)带有一个引用传递,地址传递,在main方法里交换前后要变,地址改变成怎样就怎样。
String内存分析,for-each,参数传递的更多相关文章
- [Java] 01 String 内存分析
public class StringTest{ public static void main(String[] args){ String str1 = new String("123& ...
- String类——StringBuilder类的源码及内存分析(java)
相同:底层均采用字符数组value来保存字符串 区别:String类的value数组有final 修饰,指向不可改,同时private 未提供修改value数组的方法.StringBuilder类的v ...
- String对象内存分析
Java中内存分析: 栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中). 堆(heap): ...
- Chrome开发者工具之JavaScript内存分析
阅读目录 对象大小(Object sizes) 对象的占用总内存树 支配对象(Dominators) V8介绍 Chrome 任务管理器 通过DevTools Timeline来定位内存问题 内存回收 ...
- [转载]JavaScript内存分析
https://github.com/CN-Chrome-DevTools/CN-Chrome-DevTools/blob/master/md/Performance-Profiling/javasc ...
- iOS: ARC & MRC下string内存管理策略探究
ARC & MRC下string内存管理策略探究 前两天跟同事争论一个关于NSString执行copy操作以后是否会发生变化,两个人整了半天,最后写代码验证了一下,发现原来NSString操作 ...
- 面向对象编程(十)——继承之Super关键字及内存分析
Super关键字
- JS内存泄漏 和Chrome 内存分析工具简介(摘)
原文地址:http://web.jobbole.com/88463/ JavaScript 中 4 种常见的内存泄露陷阱 原文:Sebastián Peyrott 译文:伯乐在线专栏作者 - AR ...
- Eclipse中的快捷键快速生成常用代码(例如无参、带参构造,set、get方法),以及Java中重要的内存分析(栈、堆、方法区、常量池)
(一)Eclipse中的快捷键: ctrl+shift+f自动整理选择的java代码 alt+/ 生成无参构造器或者提升信息 alt+shift+s+o 生成带参构造 ctrl+shift+o快速导 ...
随机推荐
- vue之cli脚手架项目中组件的使用
在webpack-simple模板中,包括webpck模板.一个.vue文件就是一个组件. 为什么会这样呢?因为webpack干活了!webpack的将我们所有的资源文件进行打包.同时webpack还 ...
- 小程序中的block
<block/> 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性. 因为 wx:if 是一个控制属性,需要将它添加到一个标签上.如果要一次性判断多个组件标签, ...
- POJ-1975 Median Weight Bead(Floyed)
Median Weight Bead Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3162 Accepted: 1630 De ...
- opengl学习笔记(五):组合变换,绘制一个简单的太阳系
创建太阳系模型 描述的程序绘制一个简单的太阳系,其中有一颗行星和一颗太阳,用同一个函数绘制.需要使用glRotate*()函数让这颗行星绕太阳旋转,并且绕自身的轴旋转.还需要使用glTranslate ...
- 使用nginx服务器如果遇到timeou情况时可以如下设置参数,使用fastcgi: fastcgi_connect_timeout 75; 链接 fastcgi_read_timeout 600; 读取 fastcgi_send_timeout 600; 发请求
使用nginx服务器如果遇到timeou情况时可以如下设置参数,使用fastcgi: fastcgi_connect_timeout 75; 链接 fastcgi_read_timeout 600; ...
- 学习计划 mysql 引擎
-- 什么是引擎? 按照我现在的勒戒,就可以提供 Mysql 对不同表的处理方式,各有优缺点. 就像名字一样,把我们数据库看成法拉利的话,引擎也就是发送机,有的跑的快,有的距离长....... -- ...
- flask之表单验证 2018.12.23
#flask的消息闪现依赖于flash库,用户发送的请求方式存储在request模块中 #跳转依赖于redirect模块,还可以通过url_for方法来进行方法上的寻址 from flask impo ...
- Python开发【算法】:斐波那契数列两种时间复杂度
斐波那契数列 概述: 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, ...
- [python-opencv]图像二值化【图像阈值】
图像二值化[图像阈值]简介: 如果灰度图像的像素值大于阈值,则为其分配一个值(可以是白色255),否则为其分配另一个值(可以是黑色0) 图像二值化就是将灰度图像上的像素值设置为0或255,也就是将整个 ...
- IO流(9)复制指定文件夹下指定文件到目的文件夹,并改名
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import ja ...