JAVA的数组和输入
八大数据类型和String 在进行传递的时候 不会改变.
八大数据类型
public class parameterValue { //值传递
public static void main(String[] args) {
int x = 10;
method(x);
System.out.println(x);
}
public static void method(int mx) {
mx = 20;
}
/**
* 在栈内存中申请mx 这时候 x 和mx 存储的值 是一样的,但是x和mx的地址是不一样的,mx=20;并不影响x的值.
* 八大基本数据类型都是这个吊样.
* */
}
String
package oneDay;
public class RefDemo1 {
public static void main(String[] args) {
String nameString = "小飞";
String yuanString;
yuanString = new String("asd");
System.out.println(yuanString);
method(nameString);
System.out.println(nameString);
}
private static void method(String name) {
name = "小贝"; // 相当于 name = new String(); name = "小贝";
// 相当于 指向改变
/**
* 简单解释一下. String nameString 相当于在栈空间中申请了一块空间,用于存储引用地址(此时没有引用地址为空).
* nameString = 小飞; 相当于 nameString = new String("小飞"); 这时候 在堆内存申请了一块空间用于存储 实际的值.
* 也就是说 在method 这个方法 当中. 形参 String name 相当于 String name; name = nameString; 这时候 name和nameString在栈内存中
* 存储的引用地址 是一样的 , 当时当
* name = "小贝";的时候 该代码 相当于 name = new String("小贝"); 在堆内存中新申请了一块空间, 将该地址 赋予name 这时候 name和nameString在栈内存中
* 存储的值(引用地址) 就又不一样了. 所以 八大基本数据类型和String 一样 在 方法中进行传递的时候 不会改变自身的值, 但是 类 可以改变自身的值..
* * */
}
}
类
package oneDay;
public class RefDemo { //引用传递
public static void main(String[] args) {
Duck duckYuan = new Duck();
System.out.println("Duck age = "+duckYuan.age);
method(duckYuan);
System.out.println("Duck age = "+duckYuan.age);
}
private static void method(Duck duck) {
duck.age = 5;
}
/**
* Duck duckYuan = new Duck(); 在栈内存和堆内存中申请空间,并将 堆内存的地址 放入栈内存中,以待使用.
* 形参中的 Duck duck 在栈内存中申请空间,并将上面的duckYuan内存储的堆内存的地址放入duck中,
* 然后 方法内的duck.age = 5; 这时候的duck和duckYuan栈内存地址虽然不同,但期内存储的堆内存的地址 都是指向同一块堆内存地址的,这样就改变了原来的值.
*
* */
}
class Duck{
int age = 2; //省略封装
}
为什么 String也是类但是 不会改变呢? 总结一下:
在两个方法当中
name = "小贝";
duck.age = 5;
/**
* 八大基本上数据类型属于值传递.
* String以及其余的引用数据类型属于引用传递.
* 八大基本数据类型和String 不会改变其内容 , 其余的会改变内容.
* 八大基本数据类型: 新申请了栈内存空间, 在函数内的 所有操作都是针对形参的, 无论怎样搞, 都不会改变实参的值.
* String: 新申请了占内存空间, 但是改变String的值的时候, 会将新的堆内存的空间地址放到栈内存当中, 这样的话原本的栈内存和堆内存都没有发生变化, 所以String也不会变.
* 对于普通的引用数据类型, 在调用函数的时候: 新申请的形参存储的是原本引用数据类型的堆内存的地址, 在修改数据的时候会改变原来堆内存的内容. 和String的栈内存堆内存都不变相比, 这里改变了堆内存的内容, 所以值发生变化.
*
* 可以做一个实验, 在普通引用数据类型做形参的时候, 不改变堆内存的内容, 先改变一下 栈内存的地址, 这样也不会发生变化.
*/
JAVA的数组和输入的更多相关文章
- java—数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40, 30, 24}
/** * 小米关于小米笔试题 数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = * input数组中,除了input[i] 之外的 ...
- Java中数组的插入,删除,扩张
Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...
- java 对象数组
java 对象数组 from zhaocundang@163.com 先 用类声明数组: 再把类的实例赋给数组: package works; import java.util.Scanner; pu ...
- 【图文+视频新手也友好】Java一维数组详细讲解(内含练习题答案+详解彩蛋喔~)
目录 视频讲解: 一.数组的概述 二.一维数组的使用 三.Arrays工具类中的sort方法(sort方法用的多,我们具体讲一下) 四.数组中的常见异常 五.一维数组练习题 六.彩蛋(本期视频使用的P ...
- 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和
057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...
- 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用
056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...
- Java交换数组元素
Java 交换数组元素 代码示例 import java.util.Arrays; import java.util.Collections; import java.util.List; impor ...
- Java中数组
数组的定义格式: 1: 数据类型[] 数组名 2: 数据类型 数组名 动态初始化: 初始化的时候 系统会默认给数组赋值 数据类型[] 变量名 = new 数据类型[数组长度] int[] arr = ...
- java后台对前端输入的特殊字符进行转义
转自:http://www.cnblogs.com/yangzhilong/p/5667165.html java后台对前端输入的特殊字符进行转义 HTML: 常见的帮助类有2个:一个是spring的 ...
随机推荐
- nyoj-----42一笔画问题
一笔画问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...
- C#中结构体和类的区别
结构体和类同样能够定义字段,方法和构造函数,都能实例化对象,这样看来结构体和类的功能好像是一样的了,但是他们在数据的存储上是不一样的 C#结构体和类的区别问题:这两种数据类型的本质区别主要是各自指向的 ...
- 超实用的JavaScript代码段 Item8 -- js对象的(深)拷贝
js 对象 浅拷贝 和 深拷贝 1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象. 下面这个函数,就是在做拷贝: var Chinese = { nation:'中国' } var Doctor ...
- Android MotionEvent事件响应机制
在android中,事件主要包括点击.长按.拖曳.滑动等操作,这些构成了Android的事件响应,总体来说,所有的事件都由如下三个部分作为基础构成: 按下(action_down),移动(action ...
- Andriod使用webview控件往APP里内嵌网页
转自博文:http://www.cnblogs.com/JuneZhang/p/4148542.html 1.布局文件片段:res-layout <WebView android:id=&quo ...
- Chrome开发,debug的使用方法。(转)
怎样打开Chrome的开发者工具? 你可以直接在页面上点击右键,然后选择审查元素: 或者在Chrome的工具中找到: 或者,你直接记住这个快捷方式: Ctrl+Shift+I (或者Ctrl+Shif ...
- mongodb的安装及注意事项
环境:win8 32bit 1:安装 去mongodb的官网http://www.mongodb.org/downloads下载32bit的包 解压后会出现以下文件 在安装的盘C:下建立mongodb ...
- JNI的一些知识:
JNI字段描述符"([Ljava/lang/String;)V" 2012-05-31 12:16:09| 分类: Android |举报|字号 订阅 "([Ljava/ ...
- 在Android应用中使用OpenGL
Android为OpenGL ES支持提供了GLSurfaceView组件,这个组件用于显示3D图形.GLSurfaceView本身并不提供绘制3D图形的功能,而是由GLSurfaceView.Re ...
- 解析Json的谷歌官方方法Gson和阿里巴巴的fastJson方法。
//测试单个json文本 public void testGsonTwo(){ String jsonStr = "{\"id\":100,\"name\&qu ...