String类型的理解
引用:https://www.cnblogs.com/binyue/p/3862276.html
java语言中:
变量除了八大基本数据类型(byte,short,int,long,boolean,float,double,char)
基本剩下的数据类型都是引用类型(类类型,接口类型,数组)
区别:
Java中数据类型分为两大类,基本类型和对象类型。相应的,变量也有两种类型:基本类型和引用类型。
基本类型的变量保存原始值,即它代表的值就是数值本身;
而引用类型的变量保存引用值,"引用值"指向内存空间的地址,代表了某个对象的引用,而不是对象本身,
对象本身存放在这个引用值所表示的地址的位置。
对于数据类型不同,在用的过程中,会发现不同的有趣现象,这也被面试的时候,经常迷惑一下面试者,看看对java的理解程度,下面就举几个例子:
int a;
a = 6;//这个语句是正确的,八大数据类型赋值的时候必须要赋初值,否则会报错 String str;//String不属于八大数据类型,在引用的时候,就自动分配了一个地址
//如果直接输出System.out.println(str.toString());会报错,提示没有赋初始值,java在编译时候,会对没有使用的变量忽略,进行垃圾回收
引用传递和值传递
引用传递也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;
在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。(这也就是为什么数组进行自定义排序方法的时候,不用在方法体中return的原因)
值传递:
方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值。
引用传递:
也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;
在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。
Date date;
//执行实例化,开辟数据空间存放Date对象,然后把空间的首地址传给today变量
//date=new Date();
//如果注释掉上一步操作
//The local variable date may not have been initialized
//也就是说对象的数据空间没有分配
date.getDate();
看一个例子:
class MyObj{
public int b=99;
}
分别传参int和对象类型:
public class ReferencePkValue2 { public static void main(String[] args) {
ReferencePkValue2 t = new ReferencePkValue2();
int a=99;
t.test1(a);//这里传递的参数a就是按值传递
System.out.println(a); MyObj obj=new MyObj();
t.test2(obj);//这里传递的参数obj就是引用传递
System.out.println(obj.b);
} public void test1(int a){
a=a++;
System.out.println(a);
} public void test2(MyObj obj){
obj.b=100;
System.out.println(obj.b);
}
}
String类型的理解的更多相关文章
- java中八种基本数据类型以及它们的封装类,String类型的一些理解
在我们面试或者考试过程中经常会考到八种基本数据类型以及它们的封装类,那么有哪八种基本数据类型呢?它们的封装类又是什么呢? 首先,八种基本数据类型分别是:int.short.float.double.l ...
- 对String值不可变的理解以及String类型的引用传递问题
今天复习java时,突然注意到了一句以前没有注意过的一句话,String 是final修饰的,其值是不可变的.当时看的一脸懵逼,String str = "abc"; str = ...
- ElasticSearch 5学习(9)——映射和分析(string类型废弃)
在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...
- 把《c++ primer》读薄(3-1 标准库string类型初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声 ...
- 【原创】Java和C#下String类型中的==和equals的原理与区别
一.Java下 1.几个例子 public static void main(String[] arge) { String str1 = new String("1234"); ...
- java内存分配和String类型的深度解析
[尊重原创文章出自:http://my.oschina.net/xiaohui249/blog/170013] 摘要 从整体上介绍java内存的概念.构成以及分配机制,在此基础上深度解析java中的S ...
- 深入浅出Redis02 使用Redis数据库(String类型)
一 String类型 首先使用启动服务器进程 : redis-server.exe 1. Set 设置Key对应的值为String 类型的value. 例子:向 Redis数据库中插入一条数据类型为S ...
- String类型,Function类型
1.String类型: 1)创建String对象: var str=new String(s); String(s); 参数:参数 s 是要存储在 String 对象中的值或转换成 ...
- 使用==比较String类型
String类型的比较 public class StringDemo { public static void main(String[] args) { String s1 = "abc ...
随机推荐
- 插入排序—希尔排序(Shell`s Sort)原理以及Java实现
希尔排序是1959 年由D.L.Shell 提出来的,相对直接排序有较大的改进.希尔排序又叫缩小增量排序 基本思想: 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录 ...
- 用lsmod看硬盘驱动决定是sata还是scsi盘
sas盘 scsi盘 sata盘都是显示为sdx的所以无法区别唯一可以分别的是看看内核加载的驱动模块有啥 lsmod....mptsas 62545 7
- 14-THREE.JS 聚光灯
<!DOCTYPE html> <html> <head> <title></title> <script src="htt ...
- scnaf()读入字符串需要注意的地方
#include<iostream> #include<cstdio> using namespace std; int main() { ],cch[]; int a; ci ...
- PHP JSON文件解析并获取key、value,判断key是否存在
/****************************************************************************** * PHP JSON文件解析并获取key ...
- LintCode Sliding Window Matrix Maximum
原题链接在这里:http://www.lintcode.com/zh-cn/problem/sliding-window-matrix-maximum/ 题目: Given an array of n ...
- DOS命令查询当前文件夹中文件数量
太牛X,太实用,因此单独记下 1. 仅统计文件数量 dir /b /a-d | find /v /c "&#@" 2. 统计文件和目录总数量 dir /b | find / ...
- jraiser模块加载执行简要总结
1 在html文件中,通过require方式来加载指定的入口文件:2 然后通过正则表达式来匹配入口文件中的所有require的依赖文件:注意,此时入口文件已加载完毕,不过,还没执行而已.3 之后逐一通 ...
- CentOS6.5 下MySQL傻瓜式安装
为了为服务器上装mysql我先在虚拟机上练习了一下特此记录并分享; 注:参考文章https://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/ ...
- Spark Shuffle大揭秘
什么是Shuffle: Shuffle中文翻译为“洗牌”,需要Shuffle的关键原因是某种具有共同特征的数据需要最终汇聚到一个计算节点上进行计算. Shuffle面临的问题: 1. 数据量非常大: ...