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的 ...
随机推荐
- 重装系统(win7)
-_-|| 第一次装,可谓艰难险阻 一:准备 1.U盘(大小至少4G)——本人用了4G的 2.查询自己的电脑进入BIOS的方法——本人电脑机型为华硕X550VC,开机长按F2(当时为保险起见,也同时按 ...
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)
java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...
- cf(#div1 A. Dreamoon and Sums)(数论)
A. Dreamoon and Sums time limit per test 1.5 seconds memory limit per test 256 megabytes input stand ...
- Kafka简要图解
LinkedIn贡献的分布式消息系统 - 请参考这里 kafka集群:producer写入消息,consumer读取消息 消息分为不同主题,每个主题可以分为多个partition(并行),每个part ...
- Time, Clocks, and the Ordering of Events in a Distributed System
作者:Leslie Lamport(非常厉害的老头了) 在使用消息进行通信的分布式系统中,使用物理时钟对不同process进行时间同步与事件排序是非常困难的.一是因为不同process的时钟有差异,另 ...
- java成员变量与局部变量修饰符的区别
成员变量: 可以被 public,static ,protected,default,final修饰. 局部变量:包括方法里的和 代码块里的(静态和非静态) 可以被default, final修饰 参 ...
- js图片轮播图
/*焦点图*/ var Box='.carousel';//盒子 var Menu=$(Box+' .l_cursor li');//圆点菜单 var Con ...
- P264练习题1.2题
package 集合; import java.util.*; public class fourteen { public static void main(String[] args) { //1 ...
- 佳佳的魔法药水 (vijos 1285)
题目大意: 给出N种药水的价格,然后给出一些形如A B C 的关系,表示 A药水+B药水 可以组合出 C药水(保证 A+B 不会得到多种药水). 要求得到1号药水的最少花费和相应的方案数. N< ...
- H5 技术
1,HTML5预加载标签 <!-- 页面,可以使用绝对或者相对路径 --> <link rel="prefetch" href="page2.html& ...